VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 632|回复: 2

[求助] 关于鼠标勾子问题求助

[复制链接]
04_avatar_middle
online_vip 发表于 2016-4-14 00:00:01 | 显示全部楼层 |阅读模式
@Syc

VC 2008 版本下:

请问如何在鼠标勾子函数中判断鼠标的轮是向上滚动还是向下滚动?
(已尝试两种办法都失败了,不知道如何解决,感谢指导!)

建立过程如下:

新建一个全局变量:g_hMouse ;

在OnInitDialog中新建鼠标勾子:
g_hMouse = SetWindowsHookEx(WH_MOUSE,MouseProc,NULL,GetCurrentThreadId());//安装鼠标勾子;

勾子函数如下:
LRESULT CALLBACK MouseProc(int nCode,WPARAM wParam,LPARAM lParam)//鼠标勾子过程;
{
        if (wParam == WM_MOUSEWHEEL)//如果鼠标轮被滚动;
        {
//                //试着两种方法,结果都失败了:
                //第一种:
                MSLLHOOKSTRUCT *pkbhs = (MSLLHOOKSTRUCT *)lParam;
                DWORD mousedata = HIWORD(pkbhs->mouseData);//通过判断mousedata 大于还是小于0来判断,结果失败,原因是无论向上滚动还是向下滚动,mousedata 的值是一样的;

                //第二种方法:
                //short zDelta = GET_WHEEL_DELTA_WPARAM(wParam);//通过判断zDelta 大于还是小于0来判断,结果失败,原因也是无论向上滚动还是向下滚动,zDelta 的值是一样的;

                return 1;
        }
        else
                return CallNextHookEx(g_hMouse,nCode,wParam,lParam);
}

最后在程序退出时:UnhookWindowsHookEx(g_hMouse);




上一篇:关于获取当前时间的一个小问题
下一篇:如何获取bind绑定的端口号
51_avatar_middle
online_admins 发表于 2016-4-14 08:57:01 | 显示全部楼层
实在获取不到就用 WH_MOUSE_LL 钩子,肯定可以 的
04_avatar_middle
ico_lz  楼主| 发表于 2016-4-14 16:39:45 | 显示全部楼层
@Syc

鼠标勾子过程中获得滚轮滚动方向的问题已经解决了,看来看VS自带的MSDN真是不够用,最好去官网查资料,请看如下网页:
https://msdn.microsoft.com/en-us/library/windows/desktop/ms644988(v=vs.85).aspx
最后有段话:
WM_MOUSEWHEEL
If wParam is WM_MOUSEWHEEL, then lParam is actually a pointer to MOUSEHOOKSTRUCTEX, dwExtraInfo is 0 and mouseData member contains only wheel delta information. Use GetKeyState to find if SHIFT or some other key is pressed.
解决办法:把lParm转移成MOUSEHOOKSTRUCTEX,这个结构里的mouseData就代表滚轮方向!问题解决后真是挺高兴的,因为全靠自己查的,不容易啊!
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号tongdun|网站地图wx_jqr

GMT+8, 2019-3-23 22:08

Powered by Discuz! X3.4

© 2009-2019 cctry.com

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