- •Лабораторная работа №1-3 (6 часов). Программирование в api.
- •Цель работы
- •Общие сведения
- •Типы данных Wundows
- •Основы программирования для Windows. Окна и очереди.
- •Окна Windows как объекты
- •Функция окна
- •Создание простейшего приложения FirsApp.
- •Создание каркаса приложения
- •Функция _tWinMain
- •Функция MyRegisterClass
- •Функция InitInstance
- •Функция окна WndProc()
- •Немного об отладке приложений Windows
- •Задания
- •Задание 1 – 25 баллов
- •Задание 2 – 50 баллов
- •Задание 3 – 50 баллов
- •Задание 4 – 100 баллов
-
Функция 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.
-
Функция окна WndProc()
Функция окна должна иметь следующий прототип (имя функции может быть произвольным):
RESULT CALLBACK WndProc (
[in] HWND hwnd, // дескриптор окна
[in] UINT message, // номер сообщения;
[in] WPARAM wParam, // дополнительная информация о сообщении
[in] LPARAM lParam); // дополнительная информация о сообщении
);
В поле message записан код сообщения (нажата кнопка мыши, изменился размер окна, сделана выборка из меню и так далее). Поля wParam и lParam дают дополнительную информацию. Например, если изменились размеры окна, то эти параметры содержат его новые размеры.
Обычно, обработкой сообщений занимается оператор множественного вызова switch., что подробно рассматривается в лабораторной работе №2.
-
Немного об отладке приложений Windows
Отладка приложение Windows несколько отличается от отладки консольных приложений. Дело в том, что если вы выполняете отладку главной функции _tWinMain, то использование функциональной клавиши F11 не позволит вам попасть в функцию обработки сообщений (оконную функцию) WndProc. Выполнить отладку фрагментов этой функции можно лишь установив в нужных местах точки останова, либо выполнить программу, в режиме отладки, до положения курсора. Например, установите курсор на оператор PostQuitMessage(0) и нажмите F10 (выполнить до положения курсора), а затем закройте приложение. Установите курсор на оператор вызова функции DialogBox() и выполните команду меню Help|About... Выполните трассировку программы нажимая клавишу F11. Проанализируйте поведение вашего приложения в режиме отладки.
Еще одна особенность отладки приложений Windows состоит в том, что при наличии одного компьютера, нет вохзвожности наблюдать за изменением содержания окна вашего приложения на всем протяжении отладки. При наличии двух компьютеров объединенных в сеть, это становиться возможным. Такой вид отладки носит название удаленной отладки. Удаленная отладка позволяет следить за всеми изменениями просходящими в окне отлаживаемого приложения на мониторе второго компьютера.
Наша оконная функция обрабатывает всего одно сообщение – WM_DESTROY. Это сообщение приходит, когда пользователь тем или иным способом завершает работу с приложением. В этом случае, вызывается функция PostQuitMessage которая помещает в очередь приложения сообщение WM_QUIT, что приводит к разрушению окна и завершению цикла обработки сообщений в функции _tWinMain. Приложение заканчивает работу. Все другие сообщения нашей оконной функцией не обрабатываются. Они перехватываются функцией Windows DefWindowProc.