Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаб1_2011-12.docx
Скачиваний:
7
Добавлен:
07.11.2018
Размер:
140.05 Кб
Скачать
      1. Функция InitInstance

Эта функция сохраняет дескриптор окна и создает главное окно приложения FirsApp.

Для создания главного окна (класса окна), используется функция CreateWindow. Параметры функции CreateWindow дополняют описание окна, сделанное в функции MyRegisterClass.

Прототип функции CreateWindow:

HWND CreateWindow(

LPCSTR lpszClassName, // имя класса окна

LPCSTR lpszWindowName, // заголовок окна

DWORD dwStyle, // стиль окна (перекрывающееся)

int x, // координата x верхнего левого угла

int y, // координата y верхнего левого угла

int nWidth, // ширина окна

int nHeight, // высота окна

HWND hwndParent, // дескриптор родительского окна

HMENU hmenu, // дескриптор меню

HINSTANCE hinst, // дескриптор приложения

LPVOID lpvParam // указатель на дополнительные параметры

);

Многочисленные параметры функции CreateWindow дополняют описание окна, сделанное при создании класса окна функцией MyRegisterClass.

Для создания окна можно использовать функцию CreateWindowEx которой доступны расширенные стили окна с префиксом WS_EX_.

Если создание окна выполнено успешно, оно выводится на экран монитора. Эту работу выполняет функция ShowWindow:

BOOL ShowWindow (

[in] HWND hwnd,

[in] int nCmdShow );

Функция отображает окно, дескриптор которого задан параметром hwnd. Наше приложение использует в качестве второго параметра, значение nCmdShow, передаваемое Windows функции _tWinMain. И, наконец, запускается цикл обработки сообщений.

Функция UpdateWindow посылает сообщение WM_PAINT о необходимости перерисовки окна имеющего дескриптор hWnd.

Однако, для полноценного приложения Windows этого еще мало. Необходима функция обработчик сообщений (функция окна). В нашем примере эта функция имеет название WndProc.

      1. Функция окна WndProc()

Функция окна должна иметь следующий прототип (имя функции может быть произвольным):

RESULT CALLBACK WndProc (

[in] HWND hwnd, // дескриптор окна

[in] UINT message, // номер сообщения;

[in] WPARAM wParam, // дополнительная информация о сообщении

[in] LPARAM lParam); // дополнительная информация о сообщении

);

В поле message записан код сообщения (нажата кнопка мыши, изменился размер окна, сделана выборка из меню и так далее). Поля wParam и lParam дают дополнительную информацию. Например, если изменились размеры окна, то эти параметры содержат его новые размеры.

Обычно, обработкой сообщений занимается оператор множественного вызова switch., что подробно рассматривается в лабораторной работе №2.

      1. Немного об отладке приложений Windows

Отладка приложение Windows несколько отличается от отладки консольных приложений. Дело в том, что если вы выполняете отладку главной функции _tWinMain, то использование функциональной клавиши F11 не позволит вам попасть в функцию обработки сообщений (оконную функцию) WndProc. Выполнить отладку фрагментов этой функции можно лишь установив в нужных местах точки останова, либо выполнить программу, в режиме отладки, до положения курсора. Например, установите курсор на оператор PostQuitMessage(0) и нажмите F10 (выполнить до положения курсора), а затем закройте приложение. Установите курсор на оператор вызова функции DialogBox() и выполните команду меню Help|About... Выполните трассировку программы нажимая клавишу F11. Проанализируйте поведение вашего приложения в режиме отладки.

Еще одна особенность отладки приложений Windows состоит в том, что при наличии одного компьютера, нет вохзвожности наблюдать за изменением содержания окна вашего приложения на всем протяжении отладки. При наличии двух компьютеров объединенных в сеть, это становиться возможным. Такой вид отладки носит название удаленной отладки. Удаленная отладка позволяет следить за всеми изменениями просходящими в окне отлаживаемого приложения на мониторе второго компьютера.

Наша оконная функция обрабатывает всего одно сообщение – WM_DESTROY. Это сообщение приходит, когда пользователь тем или иным способом завершает работу с приложением. В этом случае, вызывается функция PostQuitMessage которая помещает в очередь приложения сообщение WM_QUIT, что приводит к разрушению окна и завершению цикла обработки сообщений в функции _tWinMain. Приложение заканчивает работу. Все другие сообщения нашей оконной функцией не обрабатываются. Они перехватываются функцией Windows DefWindowProc.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]