Управление окнами
Классы оконного интерфейса
Окно является центральным пунктом всего программного обеспечения Windows. Все классы окон имеют в качестве базового класс TWindow. Характеристики окон (их строки заголовка, опции дисплея и т.д.) хранятся во внутреннем представлении оконных элементов , структур, которыми управляет Windows. Характеристики оконных элементов задаются регистрационными классами окна, которые передаются Windows программами во время запуска. Когда программа конструирует новое окно Windows использует регистрационный класс при построении оконного элемента для этого нового окна. Из одного и того же регистрационного класса можно конструировать много элементов.
Классы окон, производимые TWindow, инкапсулируют данные и функции, которые можно использовать для управления оконными элементами. Объект окна служит интерфейсом внутреннего элемента окна, который создается и обслуживается ОС Windows. Класс TWindow автоматически регистрирует всю необходимую информацию и конструирует ассоциированный оконный элемент для каждого объекта окна.
1. произвести инициализацию объекта в конструкторе класса;
2. произвести другие инициализирующие действия, для которых требуется дискриптор окна, в замещающей функции-элементе SetupWindow;
3. применить функцию CanClose, которая возвращает TRUE, если окно может быть безопасно закрыто
4. удалить все динамически распределенные данные и произвести другие обязательные при закрытии процедуры в деструкторе класса.
Классы TWindow
Класс TWindow происходит от двух классов:
- TStreamableBase – обеспечивает взаимодействие с файлами-потоками,
- TEventHandle - позволяет вызывать функции-элементы в ответ на сообщения Windows.
Поэтому все производные от TWindow классы могут записываться в файловые потоки и откликаться на сообщения. Использоваие производных классов требует дописывания нескольких функций-элементов (или написания новых) и построения таблицы отклика для сообщений, на которые объекты данного класса должны реагировать.
Непосредственные производные TWindow:
Классы |
Применение |
TControl |
Для управляющих объектов, кнопок, линеек прокрутки, панелей списков и других органов управления, размещаемых в окне. Объекты класса являются дочерними окнами, которыми владеет окно-родитель. Эти объекты облегчают коммуникацию с управляющими компонентами окна – объект служит интерфейсом для оконного (управляющего) элемента, который создается и обслуживается системой Windows |
TFrameWindow |
Добавляет к классу TWindow взаимодействие с клавиатурой, обработку команд меню и управление пиктограммами. Восстанавливает фокусировку ввода для активируемых окон |
TGadgetWindow |
Организует накладные приспособления, такие, как кнопки инструментального планшета. Обычно объединяется с рамкой окна и используется для визуализации интерактивных команд или представления некоторой информации |
TLayoutWindow |
Определяет метрику для расположения окна (обычно дочернего окна, которым владеет другое окно). |
TTinyCaption |
Создает в окне маленькую надпись-заголовок |
TDialog |
Для конструирования диалоговых панелей |
TMDIClient |
Для окон-клиентов интерфейса сложных документов MDI |
TWindowView |
Для создания окон документ / вид |
TPreviewPage |
Для окон предварительного просмотра при печати |
TClipboardViewer |
Для окон просмотра вырезок |
Это объект TWindow специального вида, который используется в качестве главного окна программы, являются объектами класса TFrameWindow,
В простых программах TFrameWindow может служить всего лишь для вывода текста или графики, в более сложных:
- предоставляет методы динамического изменения меню программы во время исполнения,
- обеспечивает выходные операции программы, непосредственно или через одно или несколько прикрепленных окон-клиентов.
Menudemo.rh
//Resource header file
#define ID_MENU1 100
#define ID_MENU2 101
#define CM_TEST 101
#define CM_EDIT_COMMAND 102
#define CM_SEARCH_COMMAND 103
#define CM_VIEW_COMMAND 104
#define CM_TOOL_COMMAND 105
#define CM_OPTION_COMMAND 106
#define CM_WINDOW_COMMAND 107
#define CM_INSTRUCT 999
Menudemo.rc
#include <owl\window.rh>
#include "menudemo.rh"
ID_MENU1 MENU
BEGIN
POPUP "&File"
BEGIN
MENUITEM "&Test", CM_TEST
MENUITEM "E&xit", CM_EXIT
END
POPUP "&Tools"
BEGIN
MENUITEM "Tool &command", CM_TOOL_COMMAND
END
POPUP "&Options"
BEGIN
MENUITEM "Option &command", CM_OPTION_COMMAND
END
POPUP "&Help"
BEGIN
MENUITEM "&Istructions", CM_INSTRUCT
END
END
ID_MENU2 MENU
BEGIN
POPUP "&Edit"
BEGIN
MENUITEM "Edit &command", CM_EDIT_COMMAND
END
POPUP "&Search"
BEGIN
MENUITEM "Search &command", CM_SEARCH_COMMAND
END
POPUP "&View"
BEGIN
MENUITEM "View &command", CM_VIEW_COMMAND
END
POPUP "&Window"
BEGIN
MENUITEM "Window &command", CM_WINDOW_COMMAND
END
END
#include <owl\applicat.h>
#include <owl\framewin.h>
#pragma hdrstop
#include "menudemo.rh"
//The application's main window
class TDemoWin: public TFrameWindow {
public:
TDemoWin(TWindow* parent, const char far* title);
protected:
void CmTest();
void CmInstruct();
private:
bool merged;
DECLARE_RESPONSE_TABLE(TDemoWin);
};
DEFINE_RESPONSE_TABLE1(TDemoWin, TFrameWindow)
EV_COMMAND(CM_TEST, CmTest),
EV_COMMAND(CM_INSTRUCT, CmInstruct),
END_RESPONSE_TABLE;
//Constructor
TDemoWin::TDemoWin(TWindow *parent, const char far* title)
: TFrameWindow(parent, title),
TWindow(parent, title)
{
merged = FALSE;
}
//Menu command function
void
TDemoWin::CmTest()
{
if (!merged) {
MergeMenu(TMenuDescr(ID_MENU2, 0,2,1,0,1,0));
merged = TRUE;
}
}
//Display help window
void
TDemoWin::CmInstruct()
{
string msg;
string newline('\n');
msg += "Menu Demonstration" + newline + newline;
msg += "Selecting this command from the help" + newline;
msg += "menu resets the menu to its starpup" + newline;
msg += "configuration. Selecting File|Test"+ newline;
msg += "expands the menu to full size.";
MessageBox(msg.c_str(), "About Box", MB_OK);
RestoreMenu();
merged = FALSE;
}
//The application class
class TMenuDemoApp: public TApplication {
public:
TMenuDemoApp(const char far* name)
: TApplication(name) {};
void InitMainWindow();
};
//Initialize the program's main window
void
TMenuDemoApp::InitMainWindow()
{
//Standard method :
//MainWindow = new TDemoWin(0, "Main Window");
//Alternative TMenuDescr method:
TDemoWin *win = new TDemoWin(0, "Main Window");
SetMainWindow(win);
GetMainWindow()-> SetMenuDescr(TmenuDescr(ID_MENU1,1,0,0,2,0,1));
}
#pragma argsused
//Main program
int
OwlMain(int argc, char* argv[])
{
TMenuDemoApp app("MenuDemo");
return app.Run();
}
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.