Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Разорёнов 2008 full(Краткий конспект).doc
Скачиваний:
14
Добавлен:
21.04.2019
Размер:
1 Мб
Скачать
☆

2 Функция WinMain

LRESULT CALLBACK WindowProc(

HWND hwnd, // handle to window

UINT uMsg, // message identifier

WPARAM wParam, // first message parameter

LPARAM lParam // second message parameter

);

Параметр hwnd содержит дескриптор окна, uMsg – тип сообщения, остальные два – содержат дополнительную информация, прилагающуюся к сообщению.

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

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

LRESULT DefWindowProc(

HWND hWnd, // handle to window

UINT Msg, // message identifier

WPARAM wParam, // first message parameter

LPARAM lParam // second message parameter

);

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

3 Оконный класс

typedef struct _WNDCLASSEX {

UINT cbSize; //размер структуры WNDCLASSEX в байтах

UINT style; //стиль окна (примеры стилей см.таблицу №1 Приложения 1)

WNDPROC lpfnWndProc; //указатель на оконную функцию

int cbClsExtra; /*число дополнительных байтов, которые должны быть распределены в конце структуры класса для хранения информации*/

int cbWndExtra; /*число дополнительных байтов, которые должны быть распределены вслед за экземпляром окна*/

HINSTANCE hInstance; /*дескриптор экземпляра, в котором находится оконная процедура для этого класса*/

HICON hIcon; //дескриптор большой пиктограммы

HCURSOR hCursor; //дескриптор курсора

HBRUSH hbrBackground;//дескриптор кисти

LPCTSTR lpszMenuName; //указатель на строку, содержащую имя меню

LPCTSTR lpszClassName;//указатель на строку, содержащую имя класса

HICON hIconSm; //дескриптор малой пиктограммы

} WNDCLASSEX, *PWNDCLASSEX;

После формирования класса окна, его необходимо зарегистрировать в системе. Для этого применяется функция API RegisterClassEx().

ATOM RegisterClassEx(CONST WNDCLASSEX *lpWndClass);

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

4 Стили класса, стили окна

Стиль создаваемого окна определяется параметром UINT style при описании оконного класса. Стиль создаваемого окна определяется параметром dwStyle у функции HWND CreateWindow(…)

Стиль

Описание

CS_BYTEALIGNCLIENT

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

CS_BYTEALIGNWINDOW

Выравнивать окно в горизонтальном направлении по границе байта.

CS_CLASSDC

Распределить один контекст устройства для совместного использования всеми классами окна. Если несколько нитей в приложении будут пытаться использовать DC одновременно, система Windows разрешит успешно выполнить работу только одной нити.

CS_DBLCLKS

Извещает окно, когда происходит двойной щелчок.

CS_GLOBALCLASS

Создать класс, доступный всем приложениям (во время работы данного приложения, создавшего этот класс).

CS_HREDRAW

Перерисовывать все окно, если изменен размер по горизонтали.

CS_NOCLOSE

Запретить команду Close в системном меню.

CS_OWNDC

Распределить уникальный контекст устройства для каждого окна, которое создано с помощью этого класса.

CS_PARENTDC

Каждое окно, созданное с использованием этого класса, будет использовать контекст устройства родительского окна.

CS_SAVEBITS

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

CS_VREDRAW

Перерисовывать все окно, если изменен размер по вертикали.

Таблица №1 Стили класса окна

Стиль

Описание

WS_BORDER

Создание окна с рамкой в виде тонкой линии

WS_CAPTION

Создание окна с заголовком (невозможно использовать одновременно со стилем WS_DLGFRAME). Включает стиль WS_BORDER

WS_CHILD WS_CHILDWINDOW

Создание дочернего окна (невозможно использовать одновременно со стилем WS_POPUP).

WS_CLIPCHILDREN

Исключает область, занятую дочерним окном, при выводе в родительское окно.

WS_CLIPSIBLINGS

Используется совместно со стилем WS_CHILD для отрисовки в дочернем окне областей клипа, перекрываемых другими окнами.

WS_DISABLED

Создает окно, которое недоступно.

WS_DLGFRAME

Создает окно с двойной рамкой, без заголовка.

WS_GROUP

Позволяет объединять элементы управления в группы.

WS_HSCROLL

Создает окно с горизонтальной полосой прокрутки.

WS_MAXIMIZE

Создает окно максимального размера.

WS_MAXIMIZEBOX

Создает окно с кнопкой развертывания окна.

WS_MINIMIZE WS_ICONIC

Создает первоначально свернутое окно (используется только со стилем WS_OWERLAPPED).

WS_MINIMIZEBOX

Создает окно с кнопкой свертывания.

WS_OVERLAPPED

Создает перекрывающееся окно (которое, как правило, имеет заголовок и WS_TILED рамку).

WS_OVERLAPPED WINDOW

Создает перекрывающееся окно, имеющее стили WS_OVERLAPPED, WS_CAPTION, WS_SYSMENU, WS_THICKFRAME, WS_MINIMIZEBOX, WS_MAXIMIZEBOX.

WS_POPUP

Создает popup-окно (невозможно использовать совместно со стилем WS_CHILD).

WS_POPUPWINDOW

Создает popup-окно, имеющее стили WS_BORDER, WS_POPUP, WS_SYSMENU.

WS_SYSMENU

Создает окно с кнопкой системного меню (можно использовать только с окнами имеющими строку заголовка).

WS_TABSTOP

Определяет элементы управления, переход к которым может быть выполнен по клавише TAB.

WS_THICKFRAME WS_SIZEBOX

Создает окно с рамкой, используемой для изменения размера окна.

WS_VISIBLE

Создает первоначально отображаемое окно.

WS_VSCROLL

Создает окно с вертикальной полосой прокрутки.

Таблица №2 Стили окна