Не работает WM_MOUSEWHEEL в приложении на базе WTL
Как и раньше:
Код:
#define WM_MOUSEWHEEL 0x020A
Назначаю обработчик:
Код:
MESSAGE_HANDLER(WM_MOUSEWHEEL, OnMouseWheel)
Но сообщение WM_MOUSEWHEEL не приходит.
При обычном Win32 приложении на чистом WinAPI все работает.
Кто-нибудь может сталкивался с такой проблемой?
На codeproject.com нашел вот что:
Цитата:
In WTL, you can use the MSG_WM_MOUSEWHEEL message map macro to handle WM_MOUSEWHEEL. The handler should have this prototype:
LRESULT OnMouseWheel(UINT uKeys, short nDistance, CPoint pt);
WTL does not yet have support for WM_MOUSEHWHEEL, but creating a message map macro for it is simple:
#define WM_MOUSEHWHEEL 0x020E
#define MSG_WM_MOUSEHWHEEL(func) \
if (uMsg == WM_MOUSEHWHEEL) \
{ \
SetMsgHandled(TRUE); \
lResult = func((UINT)LOWORD(wParam), (short)HIWORD(wParam), \
CPoint(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam))); \
if(IsMsgHandled()) \
return TRUE; \
}
The WM_MOUSEHWHEEL handler should have the same prototype as OnMouseWheel() above. Note that I haven't tried the sample code on Vista, but hopefully it will all work!
LRESULT OnMouseWheel(UINT uKeys, short nDistance, CPoint pt);
WTL does not yet have support for WM_MOUSEHWHEEL, but creating a message map macro for it is simple:
#define WM_MOUSEHWHEEL 0x020E
#define MSG_WM_MOUSEHWHEEL(func) \
if (uMsg == WM_MOUSEHWHEEL) \
{ \
SetMsgHandled(TRUE); \
lResult = func((UINT)LOWORD(wParam), (short)HIWORD(wParam), \
CPoint(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam))); \
if(IsMsgHandled()) \
return TRUE; \
}
The WM_MOUSEHWHEEL handler should have the same prototype as OnMouseWheel() above. Note that I haven't tried the sample code on Vista, but hopefully it will all work!
Ну думаю здорово, однако, все равно не заработало.
А прикол в том, что после диалога открытия файла фокус оставался на mainframe, а не на доченьке её :)
Хотя Spy++ показывает, что сообщения в дочернее окно приходят(!)
В общем, после диалога открытия файла(или любого другого) нужно сделать SetFocus() на нужное окно.
Теперь работает. Так что реализация подходит и старая, только вот с почему Spy++ противоречит реальному положению вещей не понятно.