Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ГОС_ответы.doc
Скачиваний:
35
Добавлен:
27.10.2018
Размер:
21.59 Mб
Скачать

29 Етапи створення вікна. Які функції задіяно на кожному етапі?

Прикладная программа Windows имеет следующие основные компоненты:

  • основную функцию WinMain;

  • функцию окна.

Функция WinMain – это точка входа в программу; эта функция аналогична основной функции, используемой в стандартной среде С. Эта функция всегда называется WinMain.

Функция окна – это функция многократного вызова, т.е. функция вашей программы, которую вызывает Windows. Ваша программа никогда не вызывает эту функцию напрямую. Вместо этого она ожидает, пока ее не вызовет Windows для выполнения каких-либо действий или получения информации.

В большинстве случаев эта функция делает следующее:

  • вызывает функции инициализации, которые регистрируют классы окон, создают окна и выполняют другие инициализации;

  • запускает цикл обработки сообщений из очереди прикладной программы;

  • завершает программу при получении сообщения WM_QUIT.

Функция WinMain имеет следующий вид:

INT PASCAL WinMain(hInstance, hPrevInstance, lpCmdLine, nCmdShow)

HANDLE hInstance; /* текущий экземпляр */

HANDLE hPrevInstance; /* предыдущий экземпляр */

LPSTR lpCmdLine; /* командная строка */

INT nCmdShow; /* тип представления окна (открытое или в виде иконы) */

{

}

Функция WinMain использует соглашения по вызову языка Паскаль.

Перед созданием окна необходимо определить его класс. Класс окна – это шаблон, определяющий атрибуты окна, такие, например, как форма курсора и имя меню окна. Класс окна определяет также функцию окна, которая будет обрабатывать сообщения для всех окон этого класса. Хотя Windows обеспечивает некоторые встроенные классы окон, большинство прикладных программ определяют свои собственные классы для управления всеми аспектами различных способов работы с окнами.

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

Можно создать окно с помощью функции CreateWindow. Эта функция побуждает Windows создать окно, которое имеет указанный тип и принадлежит к определенному классу. Когда CreateWindow функция создает окно, (т.е. заканчивается успешно), она возвращает дескриптор нового окна. Этот дескриптор может быть использован для выпонения операций над окнами, таких, например, как их индицирование или корректировка их области пользователя. Хотя функция CreateWindow и создает окно, она автоматически не индицирует его. Прикладная программа должна предусмотреть индикацию окна с помощью функции ShowWindow и корректировку области пользователя окна с помощью функции UpdateWindow.

Как только функция WinMain создала и индицировала окно, она может выполнять свою основную задачу – читать сообщения из очереди прикладной программы и направлять их соответствующему окну. Функция WinMain делает это с помощью цикла обработки сообщений. Цикл обработки сообщений – это программный цикл, обычно создаваемый с использованием оператора while, при работе в котором функция WinMain находит сообщения и направляет их соответствующим функциям.

Наиболее простой цикл обработки сообщений состоит из функций GetMessage и DispatchMessage. Этот цикл имеет следующий вид:

MSG msg;

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

DispatchMessage(&msg);

}

Каждое окно должно иметь функцию окна. Функция окна обеспечивает реакцию на вводимую информацию и сообщения системы управления окнами, получаемые от Windows. Функция окна может быть простой, обрабатывающей только одно или два сообщения; она может быть и сложной, обрабатывающей большое число типов сообщений для ряда окон прикладной программы.

Функция окна имеет следующий вид:

long FAR PASCAL MainWndProc(hWnd, message, wParam,

lParam)

HWND hWnd; /* дескриптор окна */

unsigned message; /* тип сообщения */

WORD wParam; /* дополнительная информация */

LONG lParam; /* дополнительная информация */

{

switch (message) {

default: /* если не обрабатывается */

return (DefWindowProc(hWnd, message, wParam, lParam));

}

return(NULL);

}

Функция окна использует соглашение по вызову языка PASCAL. Поскольку Windows вызывает эту функцию непосредственно и всегда использует эти соглашения, требуется использовать ключевое слово PASCAL. В определении функции окна имеется ключевое слово FAR, поскольку Windows использует при вызове 32-битовый адрес.

Функция окна получает сообщения от Windows. Это могут быть сообщения о вводе, переданные функцией WinMain, или сообщения системы управления окнами, поступающие непосредственно от Windows. Функция окна должна проверить каждое сообщение и либо выполнить некоторые специальные действия, основываясь на сообщениях, либо передать сообщение обратно Windows для обработки по умолчанию с помощью функции DefWindowProc.