Страница 24 из 51
О классах окон Класс окна приложения создается при запуске приложения функцией RegisterClass. Этот класс определяет поведение окна, то есть его внешний вид, возмножности перетаскивания и многое другое на основе стилей. Когда идет разговор о классе окна не надо забывать, что класс окна это структура, которая описывает свойства окна, а не класс в понимании программиста. typedef struct tagWNDCLASS { UINT style; WNDPROC lpfnWndProc; int cbClsExtra; int cbWndExtra; HINSTANCE hInstance; HICON hIcon; HCURSOR hCursor; HBRUSH hbrBackground; LPCSTR lpszMenuName; LPCSTR lpszClassName; } WNDCLASS;
Каждое окно имеет класс. И перед созданием окна класс окна необходимо зарегистрировать. Регистрировать можно только для использования в своем приложении или для общего использования в системе всеми приложениями. Windows предоставляет много готовых классов для общего использования приложениями. Вот некоторые основные классы: Edit Listbox ComboBox ScrollBar Button Static
Кроме того, Windows предоставляет другие глобальные классы для общего доступа: Класс меню Класс рабочего стола Класс диалогового окна Класс задач Класс икон ComboBox MDIClient
Эти глобальные классы могут использовать все приложения Windows. Приложения не могут изменять добавлять или удалять эти глобальные классы. Приложение может создать подкласс глобального класса, но такой подход не рекомендуют использовать, так как он влияет на всю систему. Все глобальные классы уничтожаются при выгрузке Windows, то есть когда операционная (???) система Windows прекращает свою работу. Можно создавать свои прикладные глобальные классы. Это можно использовать для создания специальных элементов управления. Для этого описание класса необходимо поместить в DLL и класс будет доступен пока DLL находится в памяти. Описывать такой класс необходимо со стилем CS_GLOBALCLASS. Для автоматической загрузки DLL есть ключи реестра куда помещаются DLL автоматически загружаемые вместе с приложением WIN 32: HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\ CurrentVersion\Windows\APPINIT_DLLS
Кроме того Вы можете зарегистрировать свой класс в процессе инициализации приложения скажем с помощью LoadLibrary. Вы можете создавать подклассы, используя функцию SetClassLong с индексом GCL_WNDPROC. Приложение может создать свои подклассы всех стандартных классов окон. Для доступа к структуре класса окна есть несколько функций GetClassLong GetWindowLong SetClassLong SetWindowLong
Для каждой из этих функций нужно задавать два параметра: указатель на окно и смещение к данным. Вот какие бывают смещения. GCL_CURSOR GCL_HBRBACKGROUND GCL_HICON GWL_HINSTANCE GWL_HWNDPARENT GWL_ID GWL_USERDATA
Получить данные GWL_HWNDPARENT можно и по другому, воспользовавшись функциями API, такой как GetParent например. |