我的应用程序是一个基于VC6 MFC对话框的应用程序,具有多个属性页。
我必须在控件上捕获mousemove事件,例如Checkbox。
如何通过MFC中的复选框捕获mousemove事件?
答案 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;
}