Оконная процедура


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

LRESULT WINAPI MainWndProc( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);

Модификатор WINAPI используется потому, что оконная процедура должна быть вызвана в соответствии с объявленным стандартным соглашением о вызовах.

Оконная процедура получает сообщения от системы. Это могут быть сообщения управления окном или сообщения о вводе данных. Вы можете необязательно обрабатывать сообщение в своей оконной процедуре или переправлять сообщение системе для обработки по умолчанию, при помощи вызова функции DefWindowProc . Обобщенное приложение обрабатывает сообщения WM_PAINT, WM_COMMAND и WM_DESTROY, используя оператор switch, который структурируется как указано ниже:

switch( uMsg ) {
      case WM_PAINT:
      ...
      case WM_COMMAND:
      ...
      case WM_DESTROY:
      ...
      default:
         return( DefWindowProc( hWnd, msg, wParam, lParam ));
   }

Сообщение WM_PAINT указывает, что Вы должны перерисовать все, что находится в окне или часть окна вашего приложения. Используйте функцию BeginPaint, чтобы получить дескриптор контекста устройства, а затем использовать контекст устройства для рисования в пределах окна приложения, с функциями подобно TextOut. Используйте EndPaint, чтобы освободить контекст устройства. Обобщенное приложение показывает на экране текстовую строку, " Привет, Мир! ", в окне, используя нижеследующий код:

case WM_PAINT:
      hDC = BeginPaint( hWnd, &ps );

      TextOut( hDC, 10, 10, "Hello, World!", 13 );

      EndPaint( hWnd, &ps );
      break;

Сообщение WM_COMMAND указывает, что пользователь выбрал командный пункт меню. Обобщенное приложение использует нижеследующий код, чтобы проверить, был ли его пункт меню About выбран:

  case WM_COMMAND:
         switch( wParam ) {
            case IDM_ABOUT:
            ...
            break;
         }

Большинство оконных процедур обрабатывает сообщение WM_DESTROY. Система отправляет это сообщение оконной процедуре немедленно после разрушения окна. Сообщение дает Вам возможность закончить обрабатывать и помещать сообщение WM_QUIT в очереди прикладной программы. Обобщенное приложение обрабатывает сообщение WM_DESTROY как ниже указано:

case WM_DESTROY:
   PostQuitMessage( 0 );
   break;

 

Назад в оглавление
На главную страницу темы

Hosted by uCoz