mousewheel 取消_对话框不接收WM_MOUSEWHEEL消息,咋办?

mousewheel 取消_对话框不接收WM_MOUSEWHEEL消息,咋办?下面的信息来自 http support microsoft com kb 对话框上旋转鼠标滚轮时 不会处理程序中 WM MOUSEWHEEL 中的邮件对话框类不调用运行 Windows95 的计算机上 在 MFC 中的 CDialog 类没有注册 MSH MOUSEWHEEL 邮件需要才能接收 WM MOUSEWHEEL 运行 Windows95 的计算机上的邮件 按照下面介

下面的信息来自http://support.microsoft.com/kb/

对话框上旋转鼠标滚轮时, 不会处理程序中 WM_MOUSEWHEEL 中的邮件对话框类不调用运行 Windows 95 的计算机上。

在 MFC 中的 CDialog 类没有注册 MSH_MOUSEWHEEL 邮件需要才能接收 WM_MOUSEWHEEL 运行 Windows 95 的计算机上的邮件。

按照下面介绍的步骤可以解决此问题:

注册 MSH_MOUSEWHEEL 邮件。 将下面的行复制到您 dialog.cpp 文件:

AFX_STATIC UINT _afxMsgMouseWheel =

(((::GetVersion() & 0x) && LOBYTE(LOWORD(::GetVersion()) == 4)) ||

(!(::GetVersion() & 0x) && LOBYTE(LOWORD(::GetVersion()) == 3)))

? ::RegisterWindowMessage(MSH_MOUSEWHEEL) : 0;

将该行添加到对话框类的消息映射中, AFX_MSG_MAP 节之后:

ON_REGISTERED_MESSAGE(_afxMsgMouseWheel, OnRegisteredMouseWheel)

添加名为 OnRegisteredMouseWheel 传递一个 WPARAM 和 LPARAM,并返回到对话框类的 LRESULT 一个成员函数。 在函数定义 (代码取自 Winfrm.cpp) 中添加以下代码:

LRESULT CMyDialog::OnRegisteredMouseWheel(WPARAM wParam, LPARAM lParam)

{

// Convert from MSH_MOUSEWHEEL to WM_MOUSEWHEEL.

WORD keyState = 0;

keyState |= (::GetKeyState(VK_CONTROL) < 0) ? MK_CONTROL : 0;

keyState |= (::GetKeyState(VK_SHIFT) < 0) ? MK_SHIFT : 0;

LRESULT lResult;

HWND hwFocus = ::GetFocus();

const HWND hwDesktop = ::GetDesktopWindow();

if (hwFocus == NULL)

lResult = SendMessage(WM_MOUSEWHEEL, (wParam << 16) | keyState, lParam);

else

{

do {

lResult = ::SendMessage(hwFocus, WM_MOUSEWHEEL,

(wParam << 16) | keyState, lParam);

hwFocus = ::GetParent(hwFocus);

}

while (lResult == 0 && hwFocus != NULL && hwFocus != hwDesktop);

}

return lResult;

}

现在应用程序的对话框类应能够收到 WM_MOUSEWHEEL 信息。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/226358.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月16日 下午11:05
下一篇 2026年3月16日 下午11:05


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号