Ну, во-первых, вам не нужно каким-то образом проверять uMsg в обработчике сообщений, потому что в этой ситуации каждый обработчик сообщений привязан к одному конкретному сообщению.
Во-вторых, эти макросы atl обычно означают написать что-то вроде CHAIN_MSG_MAP(CMyBaseClass)
в конце вашей карты.
В любом случае, то, что вы разместили здесь, выглядит нормально, кроме этой части:
if(uMsg==wm_mousewheel)
{
//Perform task.
}
Попробуйте стереть его, добавить точку останова в обработчик и отладить. Также вы можете попробовать добавить другой нейтральный обработчик сообщений (например, WM_CLICK
) и отследить его поведение.
Это пример из MSDN, и блок кода, который вы опубликовали, фактически следует за ним.
class CMyWindow : ...
{
public:
...
BEGIN_MSG_MAP(CMyWindow)
MESSAGE_HANDLER(WM_PAINT, OnPaint)
MESSAGE_HANDLER(WM_SETFOCUS, OnSetFocus)
CHAIN_MSG_MAP(CMyBaseWindow)
END_MSG_MAP()
LRESULT OnPaint(UINT uMsg, WPARAM wParam,
LPARAM lParam, BOOL& bHandled)
{ ... }
LRESULT OnSetFocus(UINT uMsg, WPARAM wParam,
LPARAM lParam, BOOL& bHandled)
{ ... }
};