Управление окнами. Классы оконного интерфейса

Страницы работы

Содержание работы

Управление  окнами

Классы оконного интерфейса

Окно является центральным пунктом всего программного обеспечения 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

Menudemo.cpp    ( FILE / TEST, HELP / ABOUT)

#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();

}  

Похожие материалы

Информация о работе