$totalUsers = $analyticsData4->sum(function ($analyticsData4) {
return $analyticsData4['sessions'];
});
Обе части необходимы для добавления обработчика сообщений к классу. Карта отображения сообщений должна быть объявлена в Вашем классе, вместе с объявлениями для любых функций обработчика сообщений (например, 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.
afx_msg является просто пустым макросом, он должен в основном просто там обозначить, что метод является обработчиком сообщений MFC в целях удобочитаемости. Даже с afx_msg там у Вас все еще должна быть запись в карте отображения сообщений.
Часть сообщения Windows уже обрабатывается MFC, таким образом, в этих случаях можно сойти с рук добавление просто метода к производному классу.
Например, класс CWnd (также, как и много других классов MFC) уже отображает несколько сообщений Windows в, он - карта отображения сообщений (т.е. ON_WM_DRAWITEM, ON_WM_MEASUREITEM, ON_WM_ENTERIDLE и т.д., и т.д.).
Но любое другое сообщение, не уже отображенное MFC, должно будет иметь и метод класса и запись в карте отображения сообщений для него для работы.