2016-08-08 6 views
0

С https://msdn.microsoft.com/en-us/library/windows/desktop/ms646245(v=vs.85).aspx, я извлекаю что:Разность значений возвращаемого значения WM_XBUTTONDOWN между документированным значением ATL/MSDN?

Если приложение обрабатывает это сообщение, оно должно возвратить TRUE. Для дополнительную информацию о обработке возвращаемого значения см. В разделе Примечания .

В случае, если это имеет значение, то же самое относится к WM_XBUTTONUP и WM_XBUTTONDBLCLK.

Я ожидал, что найду MSG_WM_XBUTTONDOWN, чтобы сделать именно это. Однако в atlcrack.h из хрома (https://src.chromium.org/svn/trunk/src/third_party/wtl/include/atlcrack.h), я нахожу следующее:

// void OnXButtonDown(int fwButton, int dwKeys, CPoint ptPos) 
#define MSG_WM_XBUTTONDOWN(func) \ 
    if (uMsg == WM_XBUTTONDOWN) \ 
    { \ 
     SetMsgHandled(TRUE); \ 
     func(GET_XBUTTON_WPARAM(wParam), GET_KEYSTATE_WPARAM(wParam), _WTYPES_NS::CPoint(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam))); \ 
     lResult = 0; \ 
     if(IsMsgHandled()) \ 
      return TRUE; \ 
    } 

Подобные детали могут быть найдены для MSG_WM_XBUTTONDOWN и MSG_WM_XBUTTONDBLCLK.

В этом фрагменте строка lResult = 0 меня смущает. Разве это не должно быть lResult = TRUE (в соответствии с MSDN)?

+1

Существует инструкция 'return TRUE;'. – IInspectable

+0

Я вижу, но насколько я понимаю MSDN, возвращаемое значение относится к 'func' (обратный вызов), а не к функции, которая использует' MSG_WM_XBUTTONDOWN' (т. Е. Не MSG_MAP). Если вы посмотрите на соответствующие страницы, касающиеся 'WM_MOUSEMOVE', соответственно. 'MSG_WM_MOUSEMOVE', вы видите аналогичную модель. 'MSG_WM_MOUSEMOVE' также возвращает' TRUE', и MSDN заявляет, что обратный вызов должен возвращать '0' (что в случае' WM_MOUSEMOVE' верно отражается на 'lResult = 0'). – phimuemue

+0

MSDN не документирует WTL. WTL официально не поддерживается. – IInspectable

ответ