我在一个父窗口里面建了几个子窗口,子窗口有滚动条,想让滚动条响应鼠标滚轮事件,然后发现WM_MOUSEWHEEL事件都被父窗口截获了,为了让子窗口能响应滚轮事件,我试了两种方法:方法一:
在父窗口的WM_MOUSEWHEEL事件下,加上:
SetFocus(hCurrentWnd);        // hCurrentWnd是当前正在操作的子窗口方法二:
SendMessage(hCurrentWnd, WM_MOUSEWHEEL, wParam, lParam);      // 将滚轮事件转发给子窗口我想知道上面两种那种好,或者有没有更好的方法?
另外,如果用方法二,是用SendMessage好还是PostMessage好?

解决方案 »

  1.   

    2 PostMessage  相当于父窗口什么都没做,只是转发了一下,相当于子窗口接收  满足你要求
      

  2.   


    可不可以具体说下用SetFocus相比之下有什么缺点?多谢哈!
      

  3.   

    你的两个方法都没什么错,但却没什么用。
    “子窗口有滚动条,WM_MOUSEWHEEL事件都被父窗口截获了”。
    我猜是你创建在主窗口创建子窗口的时候没有指定父窗口,或者你把主窗口的属性设置成WS_CLIPSIBLING,这样的话它们都是属于同一级的窗口,所有的窗口消息都跑到主窗口那里去了。
    你应该设置WS_CLIPCHILDREN风格,这样你在子窗口的WM_MOUSEWHEEL事件,主窗口会让子窗口自己去处理。
    当然,这是我猜想的,有错的话请指出。
      

  4.   


    我又查看了一下,子窗口在createwindow时指定了父窗口hwndParent,我的父窗口是WS_CLIPCHILDREN,子窗口是WS_CLIPCHILDREN | WS_CLIPSIBLINGS两个都有,不过还是不能响应鼠标滚轮,
    但还是非常感谢你,我也又学到了
      

  5.   

    SetFocus,谁有输入焦点,谁将处理键盘和鼠标消息。
    不然叫什么输入焦点
      

  6.   

    我在一个父窗口里面建了几个子窗口,子窗口有滚动条,想让滚动条响应鼠标滚轮事件,然后发现WM_MOUSEWHEEL事件都被父窗口截获了,为了让子窗口能响应滚轮事件,我试了两种方法:
    =============
    如果当前焦点在子窗口的话,消息不可能会被父窗口截获的
      

  7.   


    但是,怎样才能让子窗口获得焦点呢?
    我用鼠标单击了子窗口,然后再用滚轮,可是没有用,我只能用SetFocus来强制设置焦点不知道原因了
      

  8.   

    你有没有在子窗口里边写WM_MOUSEWHEEL的消息过程?