- •2.3. Цикл сообщений 15
- •2.4. Функция окна 16
- •1. Концепция программирования под Windows. Основные понятия
- •1.1. Программная среда Windows
- •1.2. Интерфейс вызовов функций в Windows
- •1.3. Библиотеки динамической загрузки
- •1.5. Интерфейс gdi
- •1.6. Многозадачность в Windows
- •1.7. Взаимодействие программ и Windows
- •1.8. Основы программирования под Windows
- •1.8.1.Функция WinMain()
- •1.8.2. Функция окна
- •1.8.3. Цикл сообщений
- •1.8.4. Класс окна
- •1.8.5. Специфика программ для Windows
- •1.8.6. Типы данных в Windows
- •1.8.7. Соглашение об использовании имен
- •1 Вертикальная полоса прокрутки .9. Элементы окна
- •2. Каркас программы под Windows. Создание окна
- •2.1. Каркас программы для Windows 95
- •2.1. Определение класса окна
- •2.2. Создание окна
- •2.3. Цикл сообщений
- •2.4. Функция окна
- •3. Порядок выполнения работы
2.2. Создание окна
Когда класс окна определен и зарегистрирован, приложение может создать окно с помощью API-функции CreateWindow(), которая имеет следующий прототип.
HWND CreateWindow(
LPCSTR IpszClassName, /* имя класса окна */ LPCSTR LPCSTR IpszWinName, /* заголовок окна */
DWORD dwStyle, /* тип окна */
int X, int Y, /* координаты верхнего левого угла */
int Width, int Height, /* размеры окна */
HWND hParent, /* дескриптор родительского окна */
HMENU hMenu, /* дескриптор главного меню */
HINSTANCE hThisInst, /* дескриптор программы, создающей окно*/
LPVOID IpszAdditional /* указатель на дополнительную */
/* информацию */
);
Из текста программы видно, что большинство параметров функции могут быть заданы по умолчанию или определены как NULL. Например, для параметров X,Y, Width и Height чаще всего используется константа CW_USEDEFAULT, которая указывает на то, что Windows 95 сама выберет требуемый размер окна и его расположение на экране. Если окно не имеет родительского окна, как в данном примере, то в параметре hParent необходимо указать константу HWND_DESKTOP (или NULL). Если окно не содержит главного меню, то параметр hMenu должен равняться NULL. Если никакая дополнительная информация для создания окна не требуется (а так чаще всего и бывает), то параметр lpszAdditional также должна равняться NULL. Тип LPVOID определен с помощью typedef-декларации, как void. Исторически, тип LPVOID обозначает длинный указатель на void.
Оставшиеся четыре параметра должны быть заданы явно. Первый из lpszClassName, должен указывать на имя класса окна. Это имя было присвоено классу при регистрации. Заголовок окна содержится в строке, на которую указывает параметр lpszWinName. Это может быть и пустая строка, но обычно окну дается заголовок. Стиль (или тип) создаваемого окна задается значением параметра dwStyle. Константа WS_OVERLAPPEDWINDOW определяет стандартное окно, в котором имеется системное меню, рамка, кнопки минимизации, максимизации и закрытия. Хотя этот стиль является наиболее общим, можно определить другой стиль по собственным критериям. Для этого достаточно с помощью операции побитового ИЛИ объединить несколько констант. Наиболее часто используемые константы приведены в табл. 2.4.
Таблица 2.4. Стили масштабируемых окон
Константа стиля |
Элемент окна |
WS_OVERLAPPED |
Стандартное окно с рамкой |
WS_MAXIMIZEBOX |
Кнопка максимизации |
WS_MINIMIZEBOX |
Кнопка минимизации |
WS_SYSMENU |
Системное меню |
WS_HSCROLL |
Горизонтальная полоса прокрутки |
WS_VSCROLL |
Вертикальная полоса прокрутки |
Параметр hThislnst должен содержать дескриптор текущего экземпляра приложения. Функция CreateWindow() возвращает дескриптор создаваемого окна или NULL, если окно не может быть создано.
Хотя окно создано, оно еще не отображено на экране. Для этого необходимо вызвать API-функцию ShowWindow(), которая имеет такой прототип:
BOOL ShowWindow(HWND hwnd, int nHow) ;
Дескриптор отображаемого окна указывается в параметре hwnd. Режим отображения задается параметром nHow. При первом отображении окна необходимо в качестве данного параметра указать пapaметр nWinMode функции WinMain(). Помните, что этот параметр определяет способ отображения окна при создании программы. При последующих вызовах функции можно отображать окно в других режимах или закрывать его в случае необходимости. Ниже приведены наиболее распространенные значения параметра nHow (табл. 2.5):
Таблица 2.5. Константы отображения
Константа отображения |
Действие |
SW_HIDE |
Окно закрывается |
SW_MAXIMIZE |
Окно раскрывается на весь экран |
SW_MINIMIZE |
Окно сворачивается в пиктограмму |
SW_RESTORE |
Окно приводится к нормальному размеру |
Функция ShowWindow() возвращает признак предыдущего состояния окна. Если оно было на экране, то результат ненулевой, в противном случае значением функции будет ноль.
Хотя с технической точки зрения в данной программе нет необходимости вызывать функцию UpdateWindow(), ее вызов все же присутствует, потому что данная функция используется в большинстве приложений для Windows 95. Фактически, она указывает Windows 95 на необходимость послать программе сообщение WM_PAINT.