Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Практикум программирования на С++ под Windows


Служба Рассылок Subscribe.Ru проекта Citycat.Ru

             Практикум программирования на C++ под Windows
                        comp.soft.prog.cppwin

Выпуск #8
22/10/2000

*** ПРОСТЕЙШАЯ ОКОННАЯ ПРОГРАММА ****************************************

Мне думается, что не стоит долго останавливаться на консольных приложениях. Главное пока что вы знаете что они есть... Начиная с этого выпуска мы займемся оконными программами - имеющими окна.

Минимальная оконная программа

В отличие от консольного приложения, проект оконного приложения должен иметь тип Win32 Application. Минимум функциональности для приложения Windows - это программа с единственным окном. Такое приложение должно содержать функции:

WinMain - основная ф-ция приложения, в которой выполняется: Регистрация класса главного окна (RegisterClass) Создание главного окна (CreateWindow) Цикл обработки сообщений (GetMessage, TranslateMessage, DispatchMesssage) Оконная процедура главного окна

Регистрация оконного класса - это определение шаблона, на основании которого будет создаваться наше окно. Самое важное в классе окна - это его название и оконная процедура.

WNDCLASS wc; FillMemory(&wc, sizeof(wc), 0); //Подготовка структуры wc.hInstance = hInstance; //Указание экземпляра приложения wc.lpfnWndProc = (WNDPROC) MainWndProc; //Оконная процедура wc.hIcon = LoadIcon((HINSTANCE) NULL, IDI_APPLICATION); //Иконка wc.hCursor = LoadCursor((HINSTANCE) NULL, IDC_ARROW); //Курсор мыши wc.hbrBackground = GetStockObject(WHITE_BRUSH); //Фон окна wc.lpszClassName = "MainWndClass"; //Название оконного класса if (!RegisterClass(&wc)) return FALSE; //Собственно регистрация

Создание окна состоит в вызове CreateWindow и показе созданного окна на экране:

hwndMain = CreateWindow("MainWndClass", "Sample", WS_OVERLAPPEDWINDOW, //Стили окна CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, //Координаты (HWND) NULL, (HMENU) NULL, hinst, (LPVOID) NULL); if (! hwndMain) return FALSE; ShowWindow(hwndMain, nCmdShow); //Показать окно на экране UpdateWindow(hwndMain); //Отрисовать окно немедленно

Основная часть функции WinMain - это цикл обработки сообщений. Именно в нем находится выполнение программы все основное время. Цикл состоит в получении от состемы очередного сообщения (message) и его обработки в зависимости от типа сообщения. Завершается цикл при получении сообщения WM_QUIT.

MSG msg; //Структура для хранения параметров сообщения while (GetMessage(&msg, (HWND) NULL, 0, 0)){ //Получение очередного сообщения TranslateMessage(&msg); //Предобработка для клавиатурных сообщений DispatchMessage(&msg); //Распределение сообщений по окнам } return msg.wParam; //Завершение работы программы Оконная процедура (WindowProc) задает поведение окна, в ней выполняется обработка сообщений, поступающих в главное окно. За один вызов функции обрабатывается только одно сообщение. Оконной процедурой главного окна (как min) должно обрабатываться сообщение о закрытии окна, остальные сообщения могут быть переданы на обработку по умолчанию:

LONG FAR PASCAL MainWndProc( //Оконная процедура главного окна HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam){ switch (msg){ case WM_DESTROY: //Окно закрыто PostQuitMessage(0); //Завершаем приложение break; default: //Обработка сообщений по умолчанию return DefWindowProc(hWnd, msg, wParam, lParam); } return 0L; }

В следующем выпуске

- приложение: полный текст простейшей оконной программы.

Дальнейшее объяснение будет сосредоточено (в основном) на дополнении оконной процедуры главного окна. После получения следующего выпуска вы сможете скомпилировать минимальную программу и начать экспериментировать с ней. ************************************************************************* Количество подписчиков: 5482 Архив Рассылки Никита Зимин Nikita_Zeemin@mail.ru



http://subscribe.ru/
E-mail: ask@subscribe.ru

В избранное