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


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


Очевидно, что в нашей функции GetWindowClass() мы прежде всего должны вызвать исходную функцию с тем же именем класса TWindow, чтобы она заполнила все поля структуры WNDCLASS тре­буемыми по умолчанию значениями. Лишь после этого можно изменить значения отдельных полей нуж­ным нам образом. Следует подчеркнуть, что необходимость вызова исходной, замещенной функции в общем случае совсем не очевидна. Так, например, заместив функцию InitMainWindow(), мы не вызывали исходный вариант, а фактически заново написали ее текст в своей программе с удобными для нас изме­нениями. Надо ли вызывать замещенные функции из замещающих (и, кстати, когда их вызывать - в на­чале замещающей функции или, возможно, в конце), а также какие строки допустимо включать в заме­щающие функции, можно определить, лишь детально рассматривая исходные тексты соответствующих классов OWL.

Наша программа выглядит несколько неуклюже из-за наличия в ней глобальных данных частного характера. Текст программы можно сделать заметно компактнее, если перенести операции загрузки ре­сурсов с получением их дескрипторов в функцию GetWindowClass(). В этом случае отпадет необходи­мость объявлять переменные hIcon и hCursor глобальными: их можно переместить в класс MyWindow. Однако функции LoadIcon() и LoadCursor() принадлежат классу TModule, и просто вызвать их из функ-


240                                                                                                                                  Глава 26

ции класса MyWindow нельзя, необходимо указать объект, для которого они вызываются. В нашей про­грамме указатель на объект производного от TModule класса MyApplication носит название mуАрр, од­нако в функции GetWindowClass() это конкретное имя, разумеется, не может быть известно. Поэтому придется в процессе выполнения функции GetWindowClass() динамически определить указатель на объ­ект приложения. Это можно сделать с помощью функции класса TWindow GetApplication(), которая воз­вращает указатель на объект класса TApplication, с которым связано наше окно. Измененный текст функции GetWindowClass() выглядит следующим образом:




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