Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
УП01_Окна_Создание приложения Win32.doc
Скачиваний:
1
Добавлен:
01.03.2025
Размер:
486.4 Кб
Скачать

Уп. 1. Создание оконных приложений Win32

1. Определения

Программы для Windows называют приложениями. Пользователь с приложением взаимодействует через окна следующих видов:

  • Окно приложения. Оно организует работу, появляется первым при запуске и закрывается вместе с прекращением работы приложения.

  • MDI-окна. Они служат для одновременной обработки нескольких документов.

  • Окно помощи. Оно в большей степени работает под управлением операционной системы, чем под управлением приложения.

  • Диалоговое окно. Оно обеспечивает оперативный обмен данными между пользователем и приложением (рис. 1.1).

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

Рис. 1.1. Окно со множеством элементов: 1 – кнопка системного меню; 2 – кнопка сворачивания окна в пиктограмму; 3 – кнопка максимилизации или восстановления размеров окна; 4 – кнопка закрытия окна; 5 – рамки изменения размеров окна

С точки зрения языка программирования, окна – это объекты (переменные), над которыми выполняют действия. Объект принадлежит к определенному классу (типу), который описывает множество данных (параметров состояния окна) и метод (функцию) изменения этих данных.

Главное окно на рис. 1.1 имеет обрамляющие двойные рамки, заголовок, различные кнопки, полосу меню, панель инструментов с кнопками, полосы просмотра, строку состояния и др. Эти элементы также являются окнами, имеют свои данные и метод их изменения, т. е. принадлежат к классам окон.

2. Класс окон

Для создания окна операционной системе указывают, к какому классу оно принадлежит. Если к моменту создания окна операционной системе известен класс создаваемого окна (например, это определенный в системе или зарегистрированный текущим или другим приложением класс), то можно воспользоваться именем этого класса. Иначе нужно создать новый класс (описать функцию окна и набор используемых ресурсов) и зарегистрировать его.

2.1. Описание используемых классом окон ресурсов

Набор используемых ресурсов класса задают в структуре типа WNDCLASS. Эта структура описана следующим образом:

typedef struct

{ UINT style;

WNDPROC lpfnWndProc;

int cbClsExtra;

int cbWndExtra;

HANDLE hInstance;

HICON hIcon;

HCURSOR hCursor;

HBRUSH hbrBackground;

LPCTSTR lpszMenuName;

LPCTSTR lpszClassName;

} WNDCLASS;

Например, если описана структура этого типа:

WNDCLASS wc;

то присваивают определенные значения ее полям. Назначение полей этой структуры:

  1. style принимает значения из табл. 1.1. Например:

wc.style = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS;

  1. lpfnWndProc указывает на функцию окна. Она будет рассмотрена ниже.

  2. cbClsExtra равно количеству дополнительных байт класса.

  3. cbWndExtra равно количеству дополнительных байт окна этого класса.

  4. hInstance указывает на дескриптор текущего приложения.

  5. hIcon указывает на имя пиктограммы (иконки), в которую превращается окно при минимизации. Ресурс иконки загружают функцией LoadIcon:

HICON LoadIcon( HINSTANCE hInst, LPCTSTR lpIconName);

Параметр lpIconName указывает на строку с именем загружаемой иконки, a hInst – дескриптор приложения, чей исполняемый код содержит загружаемый ресурс. Для загрузки стандартной иконки hInst приравнивают NULL, а в качестве lpIconName задают одно из значений табл. 1.2. Например, следующий оператор устанавливает стандартную пиктограмму окна приложения:

wc.hIcon = LoadIcon( NULL, IDI_APPLICATION );

В случае аварийного завершения функция возвращает NULL и при сворачивании окон этого класса операционная система в качестве иконки использует логотип Windows.

  1. hCursor задает вид курсора мыши при его прохождении над окном. Ресурс курсора загружают функцией LoadCursor:

HCURSOR LoadCursor( HINSTANCE hInst, LPCTSTR lpCursorName);

Параметр lpCursorName указывает на строку с именем загружаемого ресурса, a hInst – дескриптор приложения, чей исполняемый код содержит загружаемый ресурс. Для загрузки стандартного курсора hInst приравнивают NULL, а в качестве lpCursorName задают одно из значений табл. 1.3. Например, следующий оператор задает курсор в виде стандартной стрелки:

wc.hCursor = LoadCursor( NULL, IDC_ARROW);

В случае аварийного завершения функция возвращает NULL и окно будет заимствовать курсор предшествующего по движению мыши окна.

Функции LoadIcon и LoadCursor загружают ресурс иконки или курсора, только если ресурс не был загружен; иначе выбирают дескриптор загруженного ресурса.

  1. hbrBackground задает дескриптор кисти закрашивания фона окна. В качестве кисти можно использовать "чистые" цвета или пиктограмму. Чаще используют значение системного цвета (табл. 1.4.) плюс 1. Цвета преобразуют в тип HBRUSH. Например, следующий оператор устанавливает системный цвет закрашивания фона:

wc.hbrBackground = (HBRUSH)( COLOR_WINDOW+1);

Система сама удаляет кисть фона при освобождении класса. Если указать NULL, то приложение само должно красить фон окон. Для определения необходимости закрашивания приложение обрабатывает сообщение WM_ERASEBKGND или проверяет поле fErase структуры PAINTSTRUCT, заполненной функцией BeginPaint.

  1. lpszMenuName указывает на имя ресурса главного меню окон этого класса. Если задать NULL, окна этого класса не имеют заданного по умолчанию меню. Например:

wc.lpszMenuName = (LPCTSTR)NULL;

  1. lpszClassName указывает на текстовую строку, содержащую имя регистрируемого класса окон, например:

wc.lpszClassName = szName;