Структура WINDOWS – программы. — КиберПедия 

История развития хранилищ для нефти: Первые склады нефти появились в XVII веке. Они представляли собой землянные ямы-амбара глубиной 4…5 м...

Двойное оплодотворение у цветковых растений: Оплодотворение - это процесс слияния мужской и женской половых клеток с образованием зиготы...

Структура WINDOWS – программы.

2017-12-10 210
Структура WINDOWS – программы. 0.00 из 5.00 0 оценок
Заказать работу

Любая программа начинается с текста:

#include <windows.h>#include <stdlib.h>

 

const char szClassName[] = "Имя класса окна";

const char szWindowName[] = "Заголовок окна";

// Прототип функции обработки сообщений главного окна приложенияLRESULT CALLBACK WndProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam);//обрабатывает различные сообщения #pragma argsused // Не будет предупреждения, что функция не пользуется своими параметрами

int PASCAL WinMain // компилиция в стиле Паскаль (с очисткой стека от параметров функции) – ускоряет время работы

(HINSTANCE hInstance, // идентификатор приложения

HINSTANCE hPrevInstance, // идентификатор предыдущей копии приложения

LPSTR lpszCmdLine, // адрес командной строки

int nCmdShow) // будет ли видимым или невидимым

{тело функции}

 

Функция WinMain – обязательна, получает управление при запуске приложения, возвращает значение типа int, что позволяет передать операционной системе Windows или отладчику код завершения приложения. {Устанавливает расположение стека, выполняет все необходимые инициализирующие функции}

 

 

Структура программы в Windows:

Асинхр. – формируется самому себе или другому приложению, минуя системную очередь

Синхр – через системную очередь, в очередь приложения.

GetMessage выбирает сообщения из очереди приложения и осуществляет заполнение структуры MSG – для временного хранения информации о сообщении.

TranslateMessage – занимается обработкой клавишных команд.(берет сообщение из очереди сообщений.)

DispatchMessage – определяет, какому окну данного приложения направить сообщение. Предусмотрена передача управления в Windows.

Затем Windows берет обработчик, дополняет необходимым кодом (“Prolog”), чтобы функция соответствовала ОС. В этот момент Windows может перехватить управление.

В WM_QUIT проверяется, не окончание ли это работы. Да – выход, нет – идем дальше.

WM_DESTROY – сообщение, в случае закрытия окна. При его выводе из очереди приложения запускается функция, которая генерирует сообщение WM_QUIT и только после этого закрывается окно: для того, чтобы закрывалось не только окно, но и все приложение + сохранить изменения и т.п.

Функция WndProc НЕ ВЫЗЫВАЕТСЯ ни из одной функции приложения. Эту функцию вызывает Windows в процессе обработки сообщений. Для этого адрес функции WndProc указывается при регистрации класса окна. Функция выполняет обработку сообщений главного окна приложения.

 

Пример простейшего Windows-приложения.

// 1а. Подключение необходимых библиотек

#include <windows.h>

#include <stdlib.h>

 

// 1б. Объявление необходимых переменных

const char szClassName[] = "WinLab_01"; // Имя класса окна

const char szWindowName[] = "Term II. Windows Lab 01."; // Заголовок окна

 

// 1б. Объявление прототипа функции обработки сообщений

LRESULT CALLBACK WndProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam);

 

// 2. Главная функция Windows-приложения – функция WinMain

#pragma argsused

int PASCAL WinMain

(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLine, int nCmdShow)

{

// 2а. Объявление идентификатора окна

HWND hWnd;

 

// 2б. Описание класса окна

WNDCLASS wndclass;

wndclass.style = CS_HREDRAW | CS_VREDRAW;

wndclass.lpfnWndProc = WndProc;

wndclass.hInstance = hInstance;

wndclass.hIcon = LoadIcon(hInstance, IDI_APPLICATION);

wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);

wndclass.hbrBackground = 5;

wndclass.lpszMenuName = NULL;

wndclass.lpszClassName = szClassName;

 

// 2в. Регистрируем класс окна

if (!RegisterClass(&wndclass)) exit(FALSE);

 

// 2г. Создаем окно функцией CreateWindow и проверяем успешность создания

hWnd=CreateWindow(szClassName,szWindowName,WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,

0,CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);

if (!hWnd) exit(FALSE);

 

// 2д. Показываем окно

ShowWindow(hWnd, nCmdShow);

UpdateWindow(hWnd);

 

// 2е. Цикл сообщений

MSG msg;

while(GetMessage(&msg, NULL, 0, 0))

{TranslateMessage(&msg);

DispatchMessage(&msg);}

return msg.wParam;

}

 

/* 3. Обработчик сообщений */

LRESULT CALLBACK WndProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam)

{switch (iMessage)

{case WM_DESTROY:

PostQuitMessage(0);

break;

default:

return DefWindowProc(hWnd, iMessage, wParam, lParam); }

return 0;}

Таким образом, для создания окна в Windows необходимо произвести следующие действия:1.0 Написать функцию WinMain 1.1 Зарегистрировать класс окна 1.2.Создать окно.

1.2 Организовать цикл сообщений. 1.3. Произвести визуализацию окна. 1.5 Написать обработчик сообщений.


Поделиться с друзьями:

Общие условия выбора системы дренажа: Система дренажа выбирается в зависимости от характера защищаемого...

Механическое удерживание земляных масс: Механическое удерживание земляных масс на склоне обеспечивают контрфорсными сооружениями различных конструкций...

Опора деревянной одностоечной и способы укрепление угловых опор: Опоры ВЛ - конструкции, предназначен­ные для поддерживания проводов на необходимой высоте над землей, водой...

Архитектура электронного правительства: Единая архитектура – это методологический подход при создании системы управления государства, который строится...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.013 с.