好象在WM_MOUSEWHEEL消息中无法得知是在进行前还是后移, 请各位高手指教。

解决方案 »

  1.   

    摘自MSDN:
    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)得到滚轮方向
      

  2.   

    刚刚看了一下MSDN,其关于MOUSEPROC说明里传入的WPARAM和LPARAM都没有看到关于鼠标消息对应的WPARAM和LPARAM参数,所以按楼上的做肯定是不行的。
    后发现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结构,以前我好象也遇到类似的情况,也不知道为什么,呵呵!上面的代码肯定是正确的,如果用起来还有什么问题可以给我发消息
      

  3.   

    请教(WHEEL_DELTA<<16)是什么意思?
      

  4.   

    WHEEL_DELTA<<16,'<<'是左移运算符,表示将常量WHEEL_DELTA左移16位,这个值是滚轮向上上滚的量