http://tikitak.narod.ru ---- Главная страница сайта
Шаг 76 - Тренировка - приложение Pr3
Цель данной тренировки создать приложение, которое умеет обрабатывать сообщения Windows.
Запускаем VC и AppWizard. Имя приложения pr3 выбираем приложение на базе одного документа и сразу Finish. Сообщения от операционной системы могут получать только три класса.
CPr3View
CMainFrame
CAboutDlg
Класс вида, рамки окна и диалогового окна. Для того, чтобы создать функцию обработки сообщения необходимо перейти в окно ClassView нажать правую кнопку мыши и выбрать пункт меню Add windows message habder. В ответ на это действие появится диалоговое окно со списком сообщений, которые можно обработать.
Выбираем сообщение WM_SIZE оно должно появиться в окне справа. После этого двойной шелчок на сообщение. Будет создана функция обработки. Проделайте это для CPr3View, вот полученная функция
void CPr3View::OnSize(UINT nType, int cx, int cy)
{
CView::OnSize(nType, cx, cy);
// TODO: Add your message handler code here
}
Изменим этот код для того, чтобы вызвать окно сообщения в момент вызова данной функции.
void CPr3View::OnSize(UINT nType, int cx, int cy)
{
CView::OnSize(nType, cx, cy);
AfxMessageBox("WM_SIZE");
}
Скомпилируйте и запустите приложение. Вы убидите, что данная функция вызывается при запуске приложения. Поменяйте размер окна и опять произойдет вызов этой функции.
Закоментируйте вызов сообщения AfxMessageBox("WM_SIZE");. И создайте обработку сообщения WM_KILLFOCUS это сообщение будет вызываться каждый раз, когда окно теряет фокус. То есть перекрываться другими окнами. Вот так. Опять для класса CPr3view
void CPr3View::OnKillFocus(CWnd* pNewWnd)
{
CView::OnKillFocus(pNewWnd);
AfxMessageBox("WM_KILLFOCUS");
}
Опять скомпилируйте и запустите. Каждый раз когда вы будете переключаться на другое окно появится это сообшение. Оно так же появится при закрытии программы. Проверьте сами.
Что происходит при проведении всех этих процедур ? Добавляются описания функций в заголовочном файле класса.
........
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);
//AfxMessageBox("WM_SIZE");
}
void CPr3View::OnKillFocus(CWnd* pNewWnd)
{
CView::OnKillFocus(pNewWnd);
// AfxMessageBox("WM_KILLFOCUS");
}
Загрузить проект | Предыдущий Шаг | Следующий Шаг | Оглавление By Artem.
Используются технологии uCoz
|