Программирование под Win32


Программирование для Windows с помощью библиотеки объектов OWL - стр. 30


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

Для придания окну приложения значка и курсора их следует сначала загрузить в память из загрузоч­ного файла приложения (и получить при этом их дескрипторы), а затем поместить эти дескрипторы в


Обработка сообщения WM_PAINT и интерфейс GDI                                                239

системную структуру типа WNDCLASS, описывающее данное окно. Поскольку мы будем обращаться к дескрипторам ресурсов из разных функций, они описаны в начале программы, как глобальные перемен­ные hIcon и hCursor. OWL-функции загрузки значка LoadIcon() и курсора LoadCursor() включены в со­став класса TModule, поэтому их проще всего вызывать из функций классов, производных от TModule. У нас таким классом является класс приложения МуАрр (см. рис. 25.2), в котором мы переопределили функцию базового класса InitMainWindow(). В текст этой функции можно включить и строки загрузки ресурсов.

Со структурой типа WNDCLASS дело обстоит сложнее, так как во-первых, надо как-то суметь к ней обратиться, и во-вторых, надо сделать это до регистрации класса окна, чтобы сделанные нами исправле­ния зарегистрировались в Windows. Для того, чтобы выполнить требуемую операцию, придется более детально рассмотреть исходные тексты функций OWL, выполняющих создание главного окна приложе­ния (рис. 26.8).

Как уже говорилось, жизнь приложения в значительной степени определяется функцией TApplica-tion::Run(), которая выполняет инициализирующие действия, создает главное окно приложения и органи­зует цикл обработки сообщений. Заместив функцию TApplication::InitMainWindow(), мы получили воз­можность создать объект myWin класса главного окна MyWindow, а также (в настоящем примере) загру­зить необходимые ресурсы - значок и курсор и получить их дескрипторы.

Регистрация класса главного окна выполняется в функции TWindow::Create(), которая вызывает для этого функцию TWindow::Register(). Как видно из рис. 26.8, функция Register() сначала вызывает функ­цию TWindow: :GetWindowClass, назначение которой - заполнить структуру WNDCLASS значениями по умолчанию. Далее вызовом функции API Windows RegisterClass выполнятся регистрация класса окна. Желая изменить настройку структуры WNDCLASS, мы должны заместить функцию класса TWindow GetWindowClass(), подставив на ее место собственную функцию с тем же именем. Это замещение вы­полняется при описании прикладного класса MyWindow.




Начало  Назад  Вперед



Книжный магазин