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

时间:2014-03-18 09:16:26

标签: c++ visual-studio visual-c++ mfc

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

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

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

4 个答案:

答案 0 :(得分:3)

复选框是一个按钮控件(例如,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);
    }

答案 1 :(得分:0)

我在@ raj的OnSetCursor()代码中发现,IDC_STATIC_TOOLTIP的关联成员变量是您为其分配所需工具提示文本的变量。例如,如果关联变量是m_strToolTip,则指定在悬停事件期间显示的所需文本,如下所示:

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

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

答案 2 :(得分:0)

您还可以覆盖 CDialog :: PreTranslateMessage

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

  return CDialog::PreTranslateMessage(pMsg);
}

答案 3 :(得分:-1)

感谢您的回复..我找到了一种方法来获取我的应用程序的mousemove事件。

WM_SETCURSOR窗口消息获取鼠标移动。它返回控件和对话框的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;

}