Регистрация класса окна и Создание окна 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Регистрация класса окна и Создание окна

Поиск

Регистрация класса окна и создание окна

 

Теперь можно вернуться к разбору программы "Hello, World!". Одна из задач функции WinMain() заключается в регистрации класса окна приложения.

 

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

 

Примечание. В Windows 95/98/NT требуется, чтобы не только приложения, но и все экземпляры одного приложения регистрировали собственные классы окон.

 

BOOL RegisterMyWindow(HINSTANCE hInstance,

                    const char * lpszName)

{

WNDCLASS wc;

wc.style = CS_HREDRAW | CS_VREDRAW; // тип отображаемого окна

wc.lpfnWndProc = (WNDPROC) WindowProc; // адрес оконной процедуры

wc.cbClsExtra = 0; //extra field

wc.cbWndExtra = 0; //extra field

wc.hInstance = hInstance; // номер приложения

wc.hIcon = LoadIcon(hInstance,IDI_APPLICATION);

wc.hCursor = LoadCursor(NULL,IDC_ARROW);

wc.hbrBackground= (HBRUSH) (COLOR_WINDOW+1); // фон окна

wc.lpszMenuName = NULL;

wc.lpszClassName= lpszName;

//определяет имя класса совпадающим с именем приложения

return RegisterClass(&wc);

}

 

В функции RegisterMyWindow с этой целью заполняется стандартная структура WNDCLASS wc, имеющая такой вид:

 

typedef struct _WNDCLASS {

UINT  style;

WNDPROC lpfnWndProc;

int   cbClsExtra;

int   cbWndExtra;

HINSTANCE hInstance;

HICON hIcon;

HCURSOR hCursor;

HBRUSH hbrBackground;

LPCTSTR lpszMenuName;

LPCTSTR lpszClassName;

} WNDCLASS, *PWNDCLASS;

 

Ниже описываются различные поля структуры wndclass:

 

.style определяет свойства окна. С помощью операции побитового ИЛИ можно задать комбинацию из нескольких свойств. Все возможные свойства поля style перечислены в MSDN в разделе "Platform SDK". Отметим здесь только, что CS_HREDRAW задает операцию перерисовки окна при изменении горизонтального размера, а CS_VREDRAW – при изменении вертикального размера.

 

.lpfnWndProc содержит указатель на оконную процедуру, которая будет обрабатывать все сообщения, посылаемые окну.

 

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

 

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

 

.hInstance содержит дескриптор экземпляра приложения, регистрирующего класс окна.

 

.hIcon содержит дескриптор значка приложения. Этот параметр может быть равным NULL – тогда будет использована стандартная пиктограмма по умолчанию (как раз она и грузится в нашем примере явно) – она выглядит как флажок с эмблемой Windows.

 

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

 

.hbrBackground определяет кисть, используемую для заливки фона окна. Может содержать дескриптор реальной кисти или одну из стандартных констант (к задаваемой константе следует прибавить 1). В частности, COLOR_WINDOW – однотонный фон окна по умолчанию. Если значение параметра hbrBackground равно NULL, то приложение должно самостоятельно управлять заливкой фона окна при получении сообщения WM_ERASEBKGND.

 

.lpszMenuName содержит указатель на строку, завершающуюся нулевым символом и представ­ляющую собой имя ресурса меню. Этот параметр может быть равным NULL.

 

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

 

В WinAPI -функцию RegisterClass() передается указатель на только что созданную структуру класса окна. Если Windows не может зарегистрировать новый класс (скажем, в случае нехватки памяти), функция возвращает 0, вследствие чего выполнение программы завершается.

 



Поделиться:


Последнее изменение этой страницы: 2024-06-27; просмотров: 48; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.217.21 (0.009 с.)