Захват сообщений в MFC - Каково различие?

Решено

$totalUsers = $analyticsData4->sum(function ($analyticsData4) {
  return $analyticsData4['sessions'];
});
5
задан Konrad 14 October 2008 в 09:46
поделиться

3 ответа

Обе части необходимы для добавления обработчика сообщений к классу. Карта отображения сообщений должна быть объявлена в Вашем классе, вместе с объявлениями для любых функций обработчика сообщений (например, OnSize).

class CClassWnd : public CBaseClassWnd {
    ...
    afx_msg void OnSize(UINT nType, int cx, int cy);
    DECLARE_MESSAGE_MAP
};

afx_msg просто пустой макрос заполнителя - он ничего на самом деле не делает, но всегда включается условно.

Карта отображения сообщений затем определяется в .cpp файле класса:

BEGIN_MESSAGE_MAP(CClassWnd, CBaseClassWnd)
    ON_WM_SIZE()
END_MESSAGE_MAP()

Они макросы генерируют справочную таблицу для класса, который позволяет сообщениям, полученным окном быть отправленными соответствующим функциям-обработчикам. ON_WM_SIZE макрос позволяет wParam и lParam параметры сообщения в WM_SIZE сообщение, которое будет декодироваться в большее количество значимых значений для функции обработчика сообщений (nType, cx, и cy в этом случае). MFC обеспечивает макросы для большинства сообщений окна (WM_LBUTTONDOWN, WM_DESTROY, и т.д.).

Можно найти больше информации о том, как карты отображения сообщений работают в MFC здесь на MSDN.

12
ответ дан 18 December 2019 в 12:03
поделиться

afx_msg является просто пустым макросом, он должен в основном просто там обозначить, что метод является обработчиком сообщений MFC в целях удобочитаемости. Даже с afx_msg там у Вас все еще должна быть запись в карте отображения сообщений.

3
ответ дан 18 December 2019 в 12:03
поделиться

Часть сообщения Windows уже обрабатывается MFC, таким образом, в этих случаях можно сойти с рук добавление просто метода к производному классу.

Например, класс CWnd (также, как и много других классов MFC) уже отображает несколько сообщений Windows в, он - карта отображения сообщений (т.е. ON_WM_DRAWITEM, ON_WM_MEASUREITEM, ON_WM_ENTERIDLE и т.д., и т.д.).

Но любое другое сообщение, не уже отображенное MFC, должно будет иметь и метод класса и запись в карте отображения сообщений для него для работы.

0
ответ дан 18 December 2019 в 12:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: