我们有一个遗留的C++ Win32应用程序,它使用OLE DoDragDrop来处理拖放。在拖放过程中是否可以接收鼠标滚轮消息?
我的IDropTarget
示例实现了以下回调:
virtual HRESULT STDMETHODCALLTYPE DragEnter(IDataObject *pDataObj, DWORD dwGrfKeyState,
POINTL pt, DWORD *pdwEffect) override;
virtual HRESULT STDMETHODCALLTYPE DragOver(DWORD dwGrfKeyState, POINTL pt,
DWORD *pdwEffect) override;
virtual HRESULT STDMETHODCALLTYPE DragLeave() override;
virtual HRESULT STDMETHODCALLTYPE Drop(IDataObject *pDataObj, DWORD dwGrfKeyState, POINTL pt,
DWORD *pdwEffect) override;
没有鼠标滚轮信息的回调。WM_MOUSEWHEEL事件被分派到我的窗口proc,而 * 不 * 拖动东西。在拖放过程中,我没有收到任何WM_MOUSEWHEEL事件。
1条答案
按热度按时间w1jd8yoj1#
事实证明,用钩子是可能的,但这并不漂亮。
我在
DoDragDrop
之前安装了两个钩子,并在DoDragDrop
返回时再次删除它们。低级钩子可以访问鼠标滚轮增量,但它不知道鼠标经过的HWND。高级钩子可以访问HWND,但它不知道鼠标滚轮增量。看起来低级钩子首先被调用,所以我只是将增量存储在一个全局变量中,并从高级钩子使用它: