好象在WM_MOUSEWHEEL消息中无法得知是在进行前还是后移, 请各位高手指教。
解决方案 »
- 断点调试出现这个错什么原因?
- 如何更改菜单项的Caption属性
- RBG图像非规则放大的难题:现有一图像宽度为720*288,要把他放大到768*288,请教有啥好办法。
- 如何动态修改Kernel在内存中的映像的数据?
- 请一个技术以外的问题,我刚参加工作,发现现在社会和我以前看的社会不一样。还请在座的社会前辈大哥指教一下我这个社会新人,谢谢!
- OnContextMenu()一般响应鼠标右键单击,但如果是以CTreeView派生,响应变为双击,如何解决?
- 数据库程序,显示“当前行不可用”,可能是什么原因?
- RedrawWindow如何同时处理多个CRect?
- ICO问题
- 简单的COM问题(2)
- 为何在编辑代码,有时能自动列出成员,但有时却不能,
- 谁有可以截获打印机数据的东东,拜托(急)
WM_MOUSEWHEEL:
Parameters
wParam
The high-order word indicates the distance the wheel is rotated, expressed in multiples or divisions of WHEEL_DELTA, which is 120. A positive value indicates that the wheel was rotated forward, away from the user; a negative value indicates that the wheel was rotated backward, toward the user. 通过判断if(HIWORD(wParam)>0)得到滚轮方向
后发现MOUSEHOOKSTRUCTEX里有关于滚轮的说明。
所以你将下面的结构体定义放入你的MOUSEPROC过程定义里
typedef struct
{
MOUSEHOOKSTRUCT MOUSEHOOKSTRUCT;
DWORD mouseData;
} MOUSEHOOKSTRUCTEX, *PMOUSEHOOKSTRUCTEX;
然后在定义一个MOUSEHOOKSTRUCTEX的指针就可以得到滚轮的方向了,下面给一段我刚才测试写在MOUSEPROC过程定义里的部分代码给你参考
if (wParam==WM_MOUSEWHEEL)
{
typedef struct
{
MOUSEHOOKSTRUCT MOUSEHOOKSTRUCT;
DWORD mouseData;
} MOUSEHOOKSTRUCTEX, *PMOUSEHOOKSTRUCTEX;
MOUSEHOOKSTRUCTEX * vv;
vv=(MOUSEHOOKSTRUCTEX *)lParam;
if (vv->mouseData==(WHEEL_DELTA<<16))
AfxMessageBox("up");
if (vv->mouseData==(-WHEEL_DELTA<<16))
AfxMessageBox("down");
}
不过有些我也很奇怪,MSDN里查MOUSEHOOKSTRUCTEX结构,说是Declared in Winuser.h(已经定义了),但找了一下就是没有,并且在MOUSEPROC过程的说明里也没有提及MOUSEHOOKSTRUCTEX结构,以前我好象也遇到类似的情况,也不知道为什么,呵呵!上面的代码肯定是正确的,如果用起来还有什么问题可以给我发消息