Программирование для IBM OS2
508 Resource Limit Is Reached

Resource Limit Is Reached

The website is temporarily unable to service your request as it exceeded resource limit. Please try again later.

Функция окна


Теперь настало время заняться функцией окна, которое было создано функцией main и после регистрации главного окна приложения, зажило своей жизнью.

Рискуя быть навязчивыми, скажем еще раз, что приложение никогда не должно вызывать функцию окна напрямую. Ей передает управление система Presentation Manager, поэтому она вызывается извне приложения. Такие функции называют функциями обратного вызова.

Прототип функции окна мы привели ниже. Учтите, что имя функции окна может быть любым. Главное, чтобы вы правильно указали это имя при регистрации класса окна функцией WinRegisterClass .

MRESULT EXPENTRY WndProc( HWND hWnd, // идентификатор окна ULONG msg, // код сообщения MPARAM mp1, // первый параметр сообщения MPARAM mp2); // второй параметр сообщения

Через параметр hWnd функции окна передается идентификатор окна. Параметр msg содержит код сообщения, а параметры mp1 и mp2 - первый и второй параметр сообщения, соответственно. Назначение параметров сообщения полностью определяется кодом сообщения.

Сравните параметры функции окна со структурой, в которую записывает сообщение функция WinGetMsg :

typedef struct _QMSG { HWND hwnd; // идентификатор окна ULONG msg; // код сообщения MPARAM mp1; // первый параметр сообщения MPARAM mp2; // второй параметр сообщения ULONG time; // время возникновения сообщения POINTL ptl; // позиция курсора мыши во время // возникновения сообщения ULONG reserved; // зарезервировано } QMSG ; typedef QMSG *PQMSG;

Как видите, функция окна получает сообщение в "разобранном" виде, удобном для анализа.

Анализ выполняется при помощи проверки кода сообщения, например, так, как это показано в следующем фрагменте кода:

MRESULT EXPENTRY WndProc(HWND hWnd, ULONG msg, MPARAM mp1, MPARAM mp2) { switch (msg) { case WM_CREATE : { . . . }

case WM_DESTROY : { . . . }

case WM_ERASEBACKGROUND : return(MRFROMLONG(1L));

case WM_BUTTON1DOWN : { . . . }

default: return(WinDefWindowProc (hWnd, msg, mp1, mp2)); } }

Если функция окна не обрабатывает какое-либо сообщение, она должна передать его функции WinDefWindowProc , выполняющей обработку по умолчанию.


Начало  Назад  Вперед


508 Resource Limit Is Reached

Resource Limit Is Reached

The website is temporarily unable to service your request as it exceeded resource limit. Please try again later.