Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Win32_f.doc
Скачиваний:
10
Добавлен:
03.05.2019
Размер:
899.07 Кб
Скачать

276 Глава 29

Функции откликов активизируются при выполнении пользователем каких-либо манипуляций с эле­ментами управления. В них вызовом OWL-функции GetPosition() для соответствующего элемента снима­ется текущее положение его ручки, функцией wspintf() формируется текущее содержимое надписи, и функцией TStatic::SetText() новая надпись выводится в дочернее окно, соответствующее статическому объекту. Для того, чтобы изменения отобразились на экране, вызывается функция Invalidate() для главно­го окна.

Помимо описанных действий, общих для обеих функций отклика, при входе в функцию UpdateFre-quency() выполняется отбраковка двух кодов нотификации - SB_THUMBTRACK и SB_ENDSCROLL. В результате отбрасываются сообщения от ползунка, возникающие, когда пользователь тащит его ручку, а также сообщения, поступающие при отпускании клавиши мыши. Игнорирование этих сообщений замет­но уменьшает мелькание экрана, который перерисовывается только в моменты окончательного выбора нового положения ручки ползунка.

Декорированные окна

В библиотеке OWL предусмотрены средства для создания в окне приложения специальных приспо­соблений - панели, или линейки инструментов, инструментального планшета и линейки, или строки со­стояния (статусной строки). Окно с такого рода приспособлениями принадлежит классу TDecoratedWin-

dow и называется декорированным окном. Как видно из рис. 29.4, этот класс является производным как от класса окон с рамками TFrameWindow, так и от класса TLayoutWindow, обеспечивающего поведение окон, размеры и положение ко­торых взаимозависимы. С помощью класса TLayoutWindow можно, например, создать дочернее окно, которое будет пропорционально изменять свои размеры при изменении размеров родительского окна, или располагаться всегда на определенном расстоянии от его границ; можно задать жест­кую связь между правой границей одного дочернего окна и левой границей другого, что как бы "приклеивает" их друг к другу. В рассматриваемом далее примере эти возможности пригодятся для создания окна-клиента, совпадающего по размерам с главным окном приложения.

Класс TDecoratedFrame, включая в себя все возможности классов TFrameWindow и TLayoutWindow, добавляет к ним еще и средства размещения в окне разного рода приспособлений с заданными характе­ристиками поведения.

Сами приспособления выделены в библиотеке OWL в отдельную группу классов, являющихся про­изводными от базового класса TGadget (рис. 29.5). В рассматриваемом далее примере будут использова­ны классы TButtonGadget и TSeparatorGadget.

Наконец, такие инструменты, как инструментальная линейка, инструментальный планшет или строка состояния образуются с помощью группы классов, производных от базового для них класса TGadget-Window (который сам выводится из класса TWindow, рис. 29.6). Мы приведем примеры использования

классов TToolBox, TMessageBar и TControlBar. Рассмотренный ниже пример 29-3 прило­жения с декорированным окном является пере­работкой примера 28-4, в котором в главное окно приложения выводилось графическое отображение некоторого массива данных, при­чем форму представления графика можно было изменять с помощью немодального диалогово­го окна. В примере 29-3. для изменения формы представления данных, а также цвета графика вместо диалога с кнопками настройки исполь­зуется классический набор инструментов деко­рированного окна (рис. 29.7).

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

Для создания декорированного окна с достаточно полными функциональными возможностями необ­ходимо выполнить следующие шаги:

  • Описать класс главного окна (в примере 29-3 — MyWindow), который должен быть производным не от класса TFrameWindow, как обычно, а от класса TDecoratedWindow

  • Описать класс окна-клиента (в примере - MyClient), производный от базового оконного класса TWindow. Именно окно-клиент будет выступать в дальнейшем в качестве рабочего окна приложения, и именно для него следует описать таблицу откликов и функцию Paint()

  • Привязать окно-клиент к главному окну приложения, что выполняется путем включения в конст­ руктор главного окна указателя на окно-клиент

  • В программе конструктора главного (декорированного) окна предусмотреть заполнение его необ­ ходимыми приспособлениями

  • Побеспокоиться заранее о разработке файлов .bmp с рисунками для кнопок инструментального планшета и линейки инструментов и включить ссылки на них в файл ресурсов приложения. В файле ре­ сурсов должна также содержаться таблица строк (ресурс STRINGTABLE), выводимых в линейку состоя­ ния.

Рассмотрим теперь текст приложения 29-3.

//Приложение 29-3. Декорированные окна

//Файл 29-3.h

#define Dlg 100

#define CM_HELP 202

#define CM_EXIT 24310

#define CM_POINTS 101

#define CM_CURVE 102

#define CM_HISTO 103

#define CM_BLUE 104

#define CM_GREEN 105

#define FILESIZE 20

#define IDB_POINTS 301

#define IDB_CURVE 302

#define IDB_HISTO 303

#define IDB_HELP 304

#define 1DB_BLUE 305

#define IDB_GREEN 306

//Файл 29-3.rc #include "29-3.h" MainMenu MENU{ POPUP "Файл"{

MENUITEM "Справка",CM_HELP

MENUITEM SEPARATOR

MENUITEM "Выход",CM_EXIT

} POPUP "Вид"{

MENUITEM "Точки",CM_POINTS

MENUITEM "Огибающая",CM_CURVE

MENUITEM "Гистограмма", CM_HISTO

} }

Dlg DIALOG 82, 70, 116, 84

STYLE WS_POPUP|WS_VISIBLE|WS_CAPTION|WS_SYSMENU CLASS "BorDlg"

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]