游戏开发论坛

 找回密码
 立即注册
搜索
查看: 4769|回复: 1

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

[复制链接]

83

主题

196

帖子

196

积分

注册会员

Rank: 2

积分
196
发表于 2009-2-23 14:30:00 | 显示全部楼层 |阅读模式
下面的信息来自http://support.microsoft.com/kb/237998

对话框上旋转鼠标滚轮时, 不会处理程序中 WM_MOUSEWHEEL 中的邮件对话框类不调用运行 Windows 95 的计算机上。
在 MFC 中的 CDialog 类没有注册 MSH_MOUSEWHEEL 邮件需要才能接收 WM_MOUSEWHEEL 运行 Windows 95 的计算机上的邮件。

按照下面介绍的步骤可以解决此问题:
注册 MSH_MOUSEWHEEL 邮件。 将下面的行复制到您 dialog.cpp 文件:
AFX_STATIC UINT _afxMsgMouseWheel =
  (((::GetVersion() & 0x80000000) && LOBYTE(LOWORD(::GetVersion()) == 4)) ||
  (!(::GetVersion() & 0x80000000) && 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 信息。

83

主题

196

帖子

196

积分

注册会员

Rank: 2

积分
196
 楼主| 发表于 2009-2-23 14:38:00 | 显示全部楼层

Re:对话框不接收WM_MOUSEWHEEL消息,咋办?

上面提供的解决方法行不通.

某用MFC做了一个对话框带有滚动条的,对话框上有按钮等控件,想在滚动鼠标滑轮时对话框上的控件也随着移动.

不知怎么实现?(拖动滚动条是可以实现的.)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-20 06:55

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表