Операционная система Microsoft Windows 3.1 для программиста -том 1


Приложение TEXTOUT - часть 3


Метод Update посылает в функцию окна сообщение WM_PAINT, вызывая функцию UpdateWindow, которая вам также знакома.

Далее вызывается функция-метод Go, определенная в классе WinApp, которая запускает цикл обработки сообщений.

После завершения цикла обработки сообщения функция WinMain возвращает управление Windows, завершая работу приложения.

Include-файл textout.hpp (листинг 2.2) содержит прототип функции окна WndProc, необходимый при создании класса окна.

Листинг 2.2. Файл textout\textout.hpp

// Прототип функции WndProc LRESULT CALLBACK _export WndProc(HWND, UINT, WPARAM, LPARAM);

Класс WinApp определяется в файле winapp.hpp (листинг 2.3).

Листинг 2.3. Файл textout\winapp.cpp

// ===================================== // Определение класса WinApp // ===================================== class WinApp { MSG msg; // структура для работы с сообщениями int errno; // флаг ошибки HINSTANCE hInstance; // идентификатор приложения

public: // Конструктор WinApp(HINSTANCE, HINSTANCE, LPSTR, int); // Регистрация класса окна BOOL RegisterWndClass(LPSTR, WNDPROC); // Запуск цикла обработки сообщений WORD Go(void); // Проверка флага ошибок int Error(void) { return errno; } };

В классе WinApp используется структура msg, нужная для временного хранения сообщения в цикле обработки сообщений, флаг ошибки errno и идентификатор приложения hInstance.

Кроме конструктора в классе WinApp определены методы RegisterWndClass (регистрация класса окна), Go (запуск цикла обработки сообщений) и Error (проверка флага ошибок). Процедуры регистрации класса окна и цикл обработки сообщения ничем не отличаются от использованных в предыдущем приложении.

Исходные тексты функций-методов класса WinApp приведены в листинге 2.4.

Листинг 2.4. Файл textout\winapp.cpp

// ===================================== // Функции-методы для класса WinApp // ===================================== #define STRICT #include <windows.h> #include "winapp.hpp" // ------------------------------------- // Конструктор класса Window // ------------------------------------- #pragma argsused WinApp::WinApp(HINSTANCE hInst, HINSTANCE hPrevInstance, LPSTR lpszCmdLine, int nCmdShow) { // Сбрасываем флаг ошибки errno = 0; // Сохраняем идентификатор приложения hInstance = hInst; } // ------------------------------------- // Регистрация класса окна // ------------------------------------- BOOL WinApp::RegisterWndClass(LPSTR szClassName, WNDPROC WndProc) { ATOM aWndClass; // атом для кода возврата WNDCLASS wc; // структура для регистрации // класса окна wc.style = 0; wc.lpfnWndProc = (WNDPROC) WndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInstance; wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); wc.hCursor = LoadCursor(NULL, IDC_ARROW); wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); wc.lpszMenuName = (LPSTR)NULL; wc.lpszClassName = (LPSTR)szClassName; aWndClass = RegisterClass(&wc); return (aWndClass != 0); } // ------------------------------------- // Запуск цикла обработки сообщений // ------------------------------------- WORD WinApp::Go(void) { // Запускаем цикл обработки сообщений while(GetMessage(&msg, 0, 0, 0)) { DispatchMessage(&msg); } return msg.wParam; }




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



Книжный магазин