有一个对话框(CDialog
)。
所有鼠标事件都会触发相应的处理程序,即:
OnLButtonDown
处理程序OnRButtonDown
处理程序OnLButtonUp
处理程序OnRButtonUp
处理程序OnMouseMove
处理程序全部,但鼠标滚轮事件,由于某种原因不会触发OnMouseWheel
处理程序。
WOE ??? (如同在地球上的什么,这是一种表达我对MFC的想法的温和方式)。
相反,我需要在PreTranslateMessage
处理程序中处理这些事件。
当然我可以使用它作为解决方案,但出于编码原因,我更倾向于以与处理所有其他鼠标事件相同的方式处理它们。
知道这可能是什么问题吗?
我发现的大部分答案都建议在邮件地图中添加ON_WM_MOUSEHWHEEL
,但我当然已经这样做了(就像我为所有其他鼠标事件所做的那样)。< / p>
我找到了一个答案,建议将WS_TABSTOP
添加到对话框样式中。无法在其中看到逻辑意义,但无论如何都要尝试它(没有任何成功,如预期的那样)。
谢谢。
标题文件:
class CInputDlg : public CDialog
{
public:
CInputDlg(CWnd* pParent = NULL);
virtual ~CInputDlg();
DECLARE_MESSAGE_MAP();
protected:
afx_msg void OnLButtonDown(UINT flags,CPoint point);
afx_msg void OnMouseWheel(UINT flags,short delta,CPoint point);
};
源文件:
BEGIN_MESSAGE_MAP(CInputDlg,CDialog)
ON_WM_LBUTTONDOWN()
ON_WM_MOUSEHWHEEL()
END_MESSAGE_MAP()
CInputDlg::CInputDlg(CWnd* pParent):CDialog(IDD_DIALOG,pParent)
{
}
CInputDlg::~CInputDlg()
{
}
void CInputDlg::OnLButtonDown(UINT flags,CPoint point)
{
// This function is reached when I click the mouse-left-button
}
void CInputDlg::OnMouseWheel(UINT flags,short delta,CPoint point)
{
// This function is not reached when I roll the mouse-wheel
}
资源文件:
IDD_DIALOG DIALOGEX 0, 0, 400, 200
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_MINIMIZEBOX | WS_MAXIMIZEBOX |
WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
EXSTYLE WS_EX_APPWINDOW
BEGIN
END
答案 0 :(得分:0)
这应该有效:
对话框消息地图:
...
BEGIN_MESSAGE_MAP(CMFCApplicationDlg, CDialog)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_WM_MOUSEWHEEL() // <<< added this
END_MESSAGE_MAP()
...
实施:
BOOL CMFCApplicationDlg::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt)
{
// This feature requires Windows Vista or greater.
// The symbol _WIN32_WINNT must be >= 0x0600.
TRACE("Mouse wheel message: (%d, %d), d = %d\n", pt.x, pt.y, zDelta);
return CDialog::OnMouseWheel(nFlags, zDelta, pt);
}
对话框类定义:
class CMFCApplicationDlg : public CDialog
{
...
afx_msg BOOL OnMouseWheel(UINT nFlags, short zDelta, CPoint pt); // added this
};
这是从新创建的基于对话框的MFC应用程序中提取的。我刚刚添加了上面提到的那些行。