Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

При инициализации окна необходимо описать параметры окна и зарегистрировать его в Windows

Сообщение WM_PAINT

1) В Windows за обновление содержимого окна отвечает программа. Окну посылается сообщение WM_PAINT, если с ним что-либо произошло (например: если часть окна была перекрыта другим окном, а затем вновь стала открыта; если минимизированное окно было восстановлено; если изменились размеры окна). В ответ на сообщение WM_PAINT окно должно обновить свою клиентскую область.

2) Приложение может передать функции окна сообщение WM_PAINT явным образом, вызывая функции UpdateWindow, InvalidateRect или InvalidateRgn. Это необходимо тогда, когда в приложении требуется изменить содержимое окна не во время обработки сообщения WM_PAINT, которое генерируется системой.

Иногда ОС Windows может сама восстановить содержимое окна, не посылая сообщение WM_PAINT (при перемещении курсора мыши или пиктограммы свернутого приложения). Если же Windows не может восстановить окно, функция окна получает сообщение WM_PAINT и перерисовывает окно самостоятельно.

3) Перед тем как записать сообщение WM_PAINT в очередь приложения, Windows посылает функции окна сообщение WM_ERASEBKGND. Если функция окна не обрабатывает сообщение WM_ERASEBKGND, передавая его функции DefWindowProc, последняя в ответ на это сообщение закрашивает внутреннюю область окна с использованием кисти, указанной в классе окна (при регистрации класса окна). Поэтому, если функция окна нарисует что-либо в окне во время обработки других сообщений, отличных от WM_PAINT, после прихода первого же сообщения WM_PAINT нарисованное изображение будет закрашено.

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


Параметры окна задаются с помощью структуры данных WNDCLASS. Вот ее определение:

typedef struct _WNDCLASS { UINT style; WNDPROC lpfnWndProc; int cbClsExtra; int cbWndExtra; HANDLE hInstance; HICON hIcon; HCURSOR hCursor; HBRUSH hbrBackground; LPCTSTR lpszMenuName; LPCTSTR lpszClassName;} WNDCLASS;

§ s tyle — Задает стиль окна. Если использовать стиль как wc.style = CS_HREDRAW | CS_VREDRAW, то это означает, что окно будет перерисовываться при изменении его размеров по горизонтали или по вертикали. Полный список стилей с их описанием приведен в библиотеке MSDN.

§ lpfnWndProc — Указатель на оконную процедуру. Окна, созданные на основе одного и того же экземпляра структуры WNDCLASS будут совместно использовать одну и ту же оконную процедуру. Например можно использовать как wc.lpfnWndProc = WndProc;

§ cbClsExtra и cbWndExtra — Это дополнительные области памяти, которые можно использовать в своих собственных целях. Если дополнительные области памяти не нужны, то обоим параметрам присваивается 0: wc.cbClsExtra = 0; wc.cbWndExtra = 0;

§ hInstance — поле для дескриптора экземпляра приложения, например так: wc.hInstance = instanceHandle;

§ hIcon — Дескриптор значка, используемого для окон, создаваемых на основе данного класса. Существует несколько стандартных значков операционной системы и можно выбрать один из них. Например: wc.hIcon = LoadIcon(0, IDI_APPLICATION);

§ hCursor — Дескриптор курсора приложения, определяющий как будет выглядеть указатель мыши, когда он находится в клиентской области окна. Здесь также есть несколько встроенных типов курсоров. Например так: wc.hCursor = LoadCursor(0, IDC_ARROW);

§ hbrBackground — Цвет фона клиентской области окна.

§ lpszMenuName — Задает меню окна. Если нет меню, то значение этого поля равно 0.

§ lpszClassName — Определяет имя создаваемого класса окна. Можно выбрать любое имя. Имя используется для идентификации структуры данных класса, чтобы можно было обращаться к ней в дальнейшем. Например на С, это будет выглядеть так: wc.lpszClassName = "Hello";

 

После описания параметров класса окна, необходимо зарегистрировать окно в Windows с помощью функции RegisterClass, которая получает указатель на структуру WNDCLASS. В случае успешного завершения функция возвращает 0. Например на С, это будет выглядеть так: if(!RegisterClass(&wc))


Структура WNDCLASSEX похожа на структуру WNDCLASS. Имеется два различия. WNDCLASSEX включает в себя член cbSize, который устанавливает размер структуры, и член hIconSm, который содержит дескриптор маленького значка, связанного с классом окна.

typedef struct {

UINT cbSize;

UINT style;

WNDPROC lpfnWndProc;

int cbClsExtra;

int cbWndExtra;

HINSTANCE hInstance;

HICON hIcon;

HCURSOR hCursor;

HBRUSH hbrBackground;

LPCTSTR lpszMenuName;

LPCTSTR lpszClassName;

HICON hIconSm;

} WNDCLASSEX, *PWNDCLASSEX;

 

<== предыдущая лекция | следующая лекция ==>
Возвращение демократов. Избрание Джимми Картера | Создание и отображение окна
Поделиться с друзьями:


Дата добавления: 2014-01-07; Просмотров: 301; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.011 сек.