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


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


Для класса MyWindow тоже предусмотрена таблица откликов ради обработки единственного сооб­щения WM_CREATE. В функции отклика создаются и выводятся на экран объекты - строки текста. По-


Окна и их оформление                                                                                                       273

скольку в соответствующих структурных переменных Attr для них не было задано ни положения, ни размеров, все эти окна необходимо позиционировать, для чего используется функция MoveWindow(). Окна класса Plain позиционируются в соответствии с заданными в глобальной переменной plainPos ко­ординатами и указанными в функции MoveWindow() размерами; со строками класса Quest дело обстоит сложнее, так как они имеют переменную длину. Для определения фактической длины строки (в числе пикселов, а не символов) служит функция GetTextExtent(), однако она учитывает характеристики шриф­та, хранящегося в настоящий момент в контексте устройства, принадлежит по этой причине классу TDC и может вызываться только для объекта этого класса. Для создания объекта контекста устройства для нашего окна можно воспользоваться конструктором класса TClientDC (или TWindowDC), однако он тре­бует в качестве параметра дескриптор окна (типа HWND), а у нас имеется только указатель quest на объ­ект окна. Однако в классе TWindow, от которого образован наш класс Quest, описан оператор преобразо­вания типа (см. гл. 22, пример 22-5). Если в какой-либо операции, требующей переменной типа HWND, указан объект класса TWindow, то, в соответствии с описанием оператора преобразования типа, вместо имени объекта подставляется конкретное значение одного из данных-членов класса TWindow, конкрет­но, дескриптора окна для этого объекта. В нашем случае в предложении

TClientDC  tdc(*quest[i]);//Преобразование объекта   TWindow в дескриптор окна

где в скобках должна стоять переменная типа HWND, указано обозначение указателя на объект со сня­той ссылкой (знак звездочки), т.е. обозначение самого объекта. В результате выполняется преобразова­ние типа и создается объект tdc - контекст нашего окна. Далее для него вызывается функция GetTextEx-tent() и полученное значение длины строки (несколько увеличенное, поскольку функция GetTextExtent() определяет длину строки неточно) используется при вызове функции перемещения окна.




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



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