На этом шаге мы рассмотрим способ установки атрибутов окна.
В программах предыдущих шагов мы не управляли процессом отображения окна на экране. Наше окно появлялось в том месте, какое укажет Windows. Размеры окна также пока находятся вне нашегоо контроля. Рассмотрим средства, управляющие положением окна на экране и его размерами.
Каждое окно, имеющее в качестве предка TWindow, наследует переменную Attr, содержащую атрибуты окна. Переменная Attr - это структура типа TWindowAttr, включающая поля, приведенные в таблице 1.
Имя | Тип | Описание |
---|---|---|
Style | DWORD | Стиль окна. |
ExStyle | DWORD | Расширенный стиль. |
X | int | х-координата. |
Y | int | y-координата. |
W | int | Ширина окна. |
H | int | Высота окна. |
Menu | TResId | Идентификатор ресурса меню. |
AccelTable | TResId | Идентификатор ресурса акселератора. |
Param | char far* | Информация MDI-окна |
Для задания атрибутов окна необходимо только указать соответствующие поля Attr в конструкторе окна. В следующем примере показано, как это сделать.
#include <owl\applicat.h> #include <owl\framewin.h> //Класс приложения. class TApp : public TApplication { public: TApp():TApplication() {} void InitMainWindow(); }; // Класс главного окна. class TWndw : public TFrameWindow { public: TWndw (TWindow *parent, const char far *title); }; //Конструктор главного окна. TWndw::TWndw(TWindow *parent, const char far *title): TFrameWindow(parent,title) { //Выключить кнопку максимизации. Attr.Style &= ~WS_MAXIMIZEBOX; //Добавить к окну вертикальную линейку прокрутки. Attr.Style |= WS_VSCROLL; //Определить расположение и размеры окна. Attr.X = 100; Attr.Y = 100; Attr.W = 400; Attr.H = 300; } //Создание главного окна приложения. void TApp::InitMainWindow() { TFrameWindow *wndw = new TWndw(0, "Управляемое окно"); SetMainWindow(wndw); } int OwlMain(int, char* []) { return TApp().Run(); }
Программа из этого примера похожа на программы, приведенные на предыдущих шагах. Ее отличие в том, что конструктор класса главяого окна не является теперь встроенным и расширен за счет включения команд, устанавливающих некоторые атрибуты окна. Как всегда, конструктор снача ла вызывает конструкторы базового класса:
TWndw::Twndw (TWindow *parent, const char far *title): TFrameWindow (parent, title);
Затем первая команда в теле конструктора выключает кнопку максимизации:
Attr.Style &= ~WS_MAXIMIZEBOX;
Как же кнопка максимизации оказалась включенной? Окно, производное от TFrameWindow, имеет по умолчанию стиль WS_OVERLAPPEDWINDOW. Окно этого стиля включает заголовок, системное меню, кнопки минимизации и максимизации. Поэтому, чтобы выключить кнопку максимизации, необходимо произвести логическое умножение (AND) отрицания WS_MAXIMIZEBOX и Attr.Style.
Из следующей строки конструктора видно, как к окну добавляется стиль с помощью логического сложения нового стиля с Attr.Style:
Attr.Style |= WS_VSCRQLL;
В данном случае к окну добавляется вертикальная линейка прокрутки. Разумеется, вы можете осуществить полный сброс стиля окна с помощью присваивания:
Attr.Style = WS_POPUP | WS_SYSMENU | WS_CAPTION;
Стиль окна хранится в двойном слове, биты которого отвечают за тип и составные части окна. Различные стили окон определены заранее через список констант. Вот некоторые из них:
Чтобы создать конкретный оконный стиль, необходимо логически сложить константы, представляющие желаемые атрибуты. Для ознакомления с полным списком этих констант обращайтесь к справочнику по Windows.
Последнее, что делает конструктор TWndw, - задает исходное положение и размеры окна. Это производится через установку значения элементов X, Y, W и Н структуры Attr, определяющих соответственно х- и у-координаты, ширину и высоту:
Attr.X = 100; Attr.Y = 100; Attr.W = 400; Attr.H = 300;
В вышеприведенном случае основное окно будет иметь координаты 100, 100 и размер 400 пикселей в ширину и 300 пикселей в высоту. На рисунке 1 показано окно, полученное с помощью этой программы.
Рис.1. Результат работы приложения
На следующем шаге мы рассмотрим функцию закрытия окна.