【问题标题】:How to capture MouseMove event in a MFC Dialog Based application for a checkbox?如何在基于 MFC 对话框的应用程序中为复选框捕获 MouseMove 事件?
【发布时间】:2014-04-23 20:50:09
【问题描述】:

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

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

如何在 MFC 中的复选框上捕获 mousemove 事件?

【问题讨论】:

  • 很好奇,为什么需要为复选框捕获鼠标移动?无论如何,您可以尝试使用 _TrackMouseEvent (或 OnMouseMove 作为 rrirower 回答)。
  • 其实我应该为复选框做工具提示功能。我的应用程序是一个基于多个属性页的 ActiveX MFC。不支持工具提示。所以我试图解决这个问题。因此我需要为一个复选框捕获鼠标移动

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


【解决方案1】:

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

【讨论】:

  • 您好,谢谢您的回复..您能给我一些示例代码吗..
【解决方案2】:

感谢您的回复。我找到了为我的应用获取 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;

}

【讨论】:

    【解决方案3】:

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

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

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

    【讨论】:

      【解决方案4】:

      您也可以覆盖 CDialog::PreTranslateMessage:

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

      【讨论】:

        猜你喜欢
        • 2011-02-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-09
        • 2021-03-12
        • 2011-11-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多