Запускаем VC и AppWizard. Имя приложения pr3 выбираем приложение на базе одного документа и сразу Finish. Мы с Вами будет создавать отклик на сообщение Windows в нашей программе. Выбираем класс. Правой кнопкой мыши вызываем свойства. Дальше Add Windows Message Handles. Вы выбираем сообщения. Щелкаем по нему. Справа в окне появиться выбранное сообщение. Выбираем его и говорим Add Handler.
Изменим код для того, чтобы вызвать окно сообщения в момент вызова данной функции.
void CPr3View::OnSize(UINT nType, int cx, int cy)
{
CView::OnSize(nType, cx, cy);
AfxMessageBox("WM_SIZE"); // в момент обработки сообщения появиться диалоговое окно
}
Cоздайте обработку сообщения WM_KILLFOCUS
void CPr3View::OnKillFocus(CWnd* pNewWnd)
{
CView::OnKillFocus(pNewWnd);
AfxMessageBox("WM_KILLFocus"); // в момент обработки сообщения появиться диалоговое окно
}
Скомпилируйте и запустите. Каждый раз, когда вы будете переключаться на другое окно появится это сообщение. Оно так же появится при закрытии программы. Проверьте сами. Кроме того сообщение WM_SIZE будет появляться каждый раз при изменение размера окна, кстати при создании приложения тоже.
Что происходит при проведении всех этих процедур? Добавляются описания функций в заголовочном файле класса.
class CPr3View : public CView
{
...........
// Generated message map functions
protected:
//{{AFX_MSG(CPr3View)
afx_msg void OnSize(UINT nType, int cx, int cy);
afx_msg void OnKillFocus(CWnd* pNewWnd);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
В таблице обработки сообщений добавляются записи.
BEGIN_MESSAGE_MAP(CPr3View, CView)
//{{AFX_MSG_MAP(CPr3View)
ON_WM_SIZE()
ON_WM_KILLFOCUS()
//}}AFX_MSG_MAP
// Standard printing commands
ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
END_MESSAGE_MAP()
В файле реализации создаются функции.
/////////////////////////////////////////////////////////////////////////////
// CPr3View message handlers
void CPr3View::OnSize(UINT nType, int cx, int cy)
{
CView::OnSize(nType, cx, cy);
}
void CPr3View::OnKillFocus(CWnd* pNewWnd)
{
CView::OnKillFocus(pNewWnd);
}
Можно обрабатывать любые сообщения Windows самостоятельно.