Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在基于MFC对话框的应用程序中为复选框捕获MouseMove事件?_C++_Visual Studio_Visual C++_Mfc - Fatal编程技术网

C++ 如何在基于MFC对话框的应用程序中为复选框捕获MouseMove事件?

C++ 如何在基于MFC对话框的应用程序中为复选框捕获MouseMove事件?,c++,visual-studio,visual-c++,mfc,C++,Visual Studio,Visual C++,Mfc,我的应用程序是一个基于VC6 MFC对话框的应用程序,具有多个属性页 我必须捕获控件上的mousemove事件,例如Checkbox 如何在MFC中通过复选框捕获mousemove事件 复选框是按钮控件(如CWnd)。从CCheckBox派生您自己的类并处理OnMouseMove事件 每个请求…假设从CButton派生的类 BEGIN_MESSAGE_MAP(CMyCheckBox, CButton) ON_WM_MOUSEMOVE() END_MESSAGE_MAP() void

我的应用程序是一个基于VC6 MFC对话框的应用程序,具有多个属性页

我必须捕获控件上的mousemove事件,例如Checkbox


如何在MFC中通过复选框捕获mousemove事件

复选框是按钮控件(如CWnd)。从CCheckBox派生您自己的类并处理OnMouseMove事件

每个请求…假设从CButton派生的类

BEGIN_MESSAGE_MAP(CMyCheckBox, CButton)
    ON_WM_MOUSEMOVE()
END_MESSAGE_MAP()


void CMyCheckBox::OnMouseMove(UINT nFlags, CPoint point)
    {
    // TODO: Add your message handler code here and/or call default

    CButton::OnMouseMove(nFlags, point);
    }

谢谢你的回复。。我找到了一种为我的应用程序获取mousemove事件的方法

WM_SETCURSOR windows消息获取鼠标移动。它返回控件和对话框的Cwnd指针

在下面找到我的代码

BOOL CMyDialog::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{
CWnd* pWndtooltip = GetDlgItem(IDC_STATIC_TOOLTIP); 

if (pWnd != this)
{
    if  (IDC_SN_START_ON == pWnd->GetDlgCtrlID())
        pWndtooltip->ShowWindow(SW_SHOW);

}
else
    pWndtooltip->ShowWindow(SW_HIDE);   

SetCursor(AfxGetApp()->LoadStandardCursor(IDC_ARROW));


return true;

}

我在@raj的
OnSetCursor()
代码中发现,IDC\u STATIC\u工具提示的关联成员变量就是您分配所需工具提示文本的变量。例如,如果关联变量为m_strtoltip,则按如下方式分配悬停事件期间要显示的所需文本:

m_strToolTip.Format("%s", "Tool tip text goes here");

我还发现在进入事件处理程序时需要
UpdateData()
,在返回之前需要
UpdateData(FALSE)
SetCursor()
调用在注释时似乎没有效果

您还可以覆盖CDDialog::PreTranslateMessage

BOOL CSomeDlg::PreTranslateMessage(MSG* pMsg)
{
  if (pMsg->message == WM_MOUSEMOVE && pMsg->hwnd == m_checkBox->m_hWnd)
  {
    ...
  }

  return CDialog::PreTranslateMessage(pMsg);
}

好奇的是,为什么需要捕捉鼠标移动作为复选框?不管怎样,你可以尝试使用_TrackMouseEvent(或者Rower回答的OnMouseMove)。实际上我应该为复选框提供工具提示功能。我的应用程序是一个基于多属性页的ActiveX MFC。不支持有工具提示。所以我试着解决这个问题。因此,我需要捕获鼠标移动以进行checkboxHi权限验证,谢谢您的回复。。你能给我一些这方面的示例代码吗。。