在vc++实现显示鼠标坐标的试验后添加一个菜单项,使其和工具按钮 ID_TEST 联动。运行后, 按下工具按钮 ID_TEST,看看菜单项有什么变化
时间: 2024-03-23 11:40:07 浏览: 22
要实现这个功能,我们需要在资源编辑器中添加一个菜单,并将其与工具栏按钮ID_TEST关联起来。具体步骤如下:
1. 打开资源编辑器,添加一个新菜单项。在菜单项上输入“显示坐标”,并为它添加一个ID为ID_DISPLAY_POS的命令标识符。
2. 在工具栏上添加一个新按钮,命名为“显示坐标”,并为它添加ID为ID_TEST的命令标识符。
3. 在消息映射中添加对ID_TEST命令的处理函数。在该函数中,判断菜单项的选中状态,并根据选中状态来显示或隐藏鼠标坐标。代码如下:
```c++
void CMainFrame::OnTest()
{
static bool bShowPos = false;
bShowPos = !bShowPos;
CheckMenuItem(GetMenu()->GetSafeHmenu(), ID_DISPLAY_POS, bShowPos ? MF_CHECKED : MF_UNCHECKED);
ShowMousePosition(bShowPos);
}
void CMainFrame::ShowMousePosition(bool bShow)
{
if (bShow)
{
SetTimer(1, 100, NULL);
}
else
{
KillTimer(1);
SetWindowText(_T("Mouse Position"));
}
}
void CMainFrame::OnTimer(UINT_PTR nIDEvent)
{
if (nIDEvent == 1)
{
POINT pt;
GetCursorPos(&pt);
ScreenToClient(&pt);
CString str;
str.Format(_T("X=%d, Y=%d"), pt.x, pt.y);
SetWindowText(str);
}
CFrameWnd::OnTimer(nIDEvent);
}
```
在上面的代码中,我们首先定义了一个静态变量bShowPos,用来存储菜单项的选中状态。在OnTest函数中,我们通过调用CheckMenuItem函数来设置菜单项的选中状态,并通过ShowMousePosition函数来显示或隐藏鼠标坐标。
在ShowMousePosition函数中,我们使用SetTimer函数来注册一个定时器,每100毫秒触发一次。在OnTimer函数中,我们获取当前鼠标的坐标,并将其显示在窗口标题栏中。
4. 在消息映射中添加对ID_DISPLAY_POS命令的处理函数。在该函数中,获取菜单项的选中状态,并将其设置给工具栏按钮。代码如下:
```c++
void CMainFrame::OnDisplayPos()
{
bool bShowPos = GetMenu()->CheckMenuItem(ID_DISPLAY_POS, MF_BYCOMMAND) == MF_CHECKED;
m_wndToolBar.GetToolBarCtrl().CheckButton(ID_TEST, bShowPos);
ShowMousePosition(bShowPos);
}
```
在上面的代码中,我们首先使用GetMenu函数获取当前菜单的句柄,并通过CheckMenuItem函数来获取菜单项的选中状态。然后,我们使用GetToolBarCtrl函数获取工具栏的控件,并使用CheckButton函数来设置工具栏按钮的选中状态。最后,我们调用ShowMousePosition函数来显示或隐藏鼠标坐标。
5. 编译并运行程序,点击工具栏上的“显示坐标”按钮,菜单项的选中状态将会改变。同时,窗口标题栏将会显示或隐藏鼠标坐标。反之,点击菜单项也会改变工具栏按钮的选中状态,并显示或隐藏鼠标坐标。
通过上述步骤,我们成功地实现了菜单项与工具栏按钮的联动,使得用户可以通过不同的方式来显示或隐藏鼠标坐标,提高了程序的易用性。
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)