Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
3 семестр, WinAPI, MFC.pdf
Скачиваний:
388
Добавлен:
15.06.2014
Размер:
6.17 Mб
Скачать

при создании окна.

при последующем удалении окна.

при изменении размеров окна.

при перемещении окна.

при свертывании окна .

при выборе пункта меню.

при манипуляциях с полосами прокрутки или с мышью.

сообщение о необходимости перерисовать рабочую область.

DefWindowProc играет ключевую роль в формировании информационных потоков сообщений Windows, и ее указание в функции окна обязательно.

Обработка сообщений типового приложения.

В типовом приложении функция WndProc обрабатывает только три сообщения: WM_CREATE, WM_PAINT и WM_DESTROY. Оконная процедура выглядит следующим образом:

switch (iMsg)

{

case WM_CREATE:

[process WM_CREATE message] return 0;

case WM_PAINT:

[process WM_PAINT message] return 0;

case WM_DESTROY:

[process WM_DESTROY message] return 0;

}

return DefWindowProc (hwnd, iMsg, wParam, lParam);

WM_CREATE

WM_CREATE – первое сообщение, обрабатываемое оконной процедурой,производя разовую инициализацию окна.

WndProc получает это сообщение тогда, когда Windows обрабатывает функцию CreateWindow Windows вызывает WndProc с описателем окна в качестве первого параметра и с WM_CREATE в качестве второго. WndProc обрабатывает сообщение WM_CREATE и передает управление обратно в Windows. Возврат к продолжению работы в WinMain. WndProc завершает обработку WM_CREATE с нулевым возвращаемым значением.

WM_PAINT

WM_PAINT - одно из важнейших сообщений для программирования под Windows. Оно сообщает программе, что часть или вся рабочая область окна недействительна (invalid), и ее следует перерисовать.

Посылается операционной системой окну, когда его часть требует перерисовки, и в очереди сообщений потока, владеющего этим окном, не находится других необработанных обработка сообщения WM_PAINT почти всегда начинается с вызова функции BeginPaint:

case WM_PAINT:

// Обновить содержимое клиентской

области окна

 

{

 

PAINTSTRUCT ps;

 

HDC hDC=BeginPaint(hWnd,&ps);

 

. . .

// вызов функций GDI для контекста

HDC

 

а заканчивается вызовом функции EndPaint:

. . .

// вызов функций GDI для контекста

HDC

 

EndPaint(hWnd, &ps);

 

}; break;

 

WM_DESTROY

WM_DESTROY – второе по важности сообщение, показывающее, что Windows находится в процессе ликвидации окна в ответ на полученную от пользователя команду.

PostQuitMessage(0); - функцияставитсообщениеWM_QUIT вочередьсообщенийпрограммы.

КогдаGetMessage получаетсообщениеWM_QUIT, функциявозвращает0. Этозаставляет WinMain прерватьциклобработкисообщенийивыйтивсистему, закончивпрограмму.

Контрольные вопросы

1.КакаяфункцияявляетсяточкойвходавWindows-программу?

2.Чтотакоедескрипторкопииприложения? Чтоонидентифицирует?

3.КакиедействияобычновыполняетфункцияWinMain?

4.Длячегонеобходиморегистрироватьклассокна?

5.Какиехарактеристикиклассаоконможнозадатьприегорегистрации? Какиеполя структуры, описывающейклассокна, являютсянаиболееважными?

6.Чтотакоеоконнаяпроцедура? Длячегоонапредназначена? Ктоеевызываетвпроцессе работыприложения?

7.Можетлиприложениесоздаватьокна, принадлежащиеклассам, которыеприложение самостоятельнонерегистрировало?

8.Чтотакоедескрипторокна? Длячегооннеобходим?