Шаг 5.
Библиотека OWL.
Установка атрибутов окна

    На этом шаге мы рассмотрим способ установки атрибутов окна.

    В программах предыдущих шагов мы не управляли процессом отображения окна на экране. Наше окно появлялось в том месте, какое укажет Windows. Размеры окна также пока находятся вне нашегоо контроля. Рассмотрим средства, управляющие положением окна на экране и его размерами.

    Каждое окно, имеющее в качестве предка TWindow, наследует переменную Attr, содержащую атрибуты окна. Переменная Attr - это структура типа TWindowAttr, включающая поля, приведенные в таблице 1.

Таблица 1. Члены класса TWindowAttr
Имя Тип Описание
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. Результат работы приложения

    На следующем шаге мы рассмотрим функцию закрытия окна.




Предыдущий шаг Содержание Следующий шаг