Написание приложений MDI

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

3 страницы (Word-файл)

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

Написание  приложений  MDI

Для отображения данных из файлов приложение MDI использует дочерние окна, так что пользователь может открывать, просматривать и редактировать сразу несколько документов и легко переходить от одного документа к другому. Каждое приложение  MDI состоит из трех основных компонент:

Окно обрамления служит главным окном программы. Главная функция – управление окном-клиентом и обеспечение визуальных компонент главного окна программы. В приложении MDI имеется только одно обрамляющее окно. Класс – TMDIFrame – mdi.h

Окно-клиент, которым владеет обрамляющее окно, обслуживает операции, относящиеся к приложению в целом и создающие новые окна документов. Окно-клиент прикрепляется к обрамлению и обслуживает все глобальные операции, относящиеся к приложения в целом или создающие новые дочерние окна и открывающие существующие файлы. В приложении MDI имеется только одно окно-клиент. Класс – TMDIClient – mdi.h

-  Одно или несколько окон документов (дочерние окна MDI) отображают файловую или другую информацию. Обычно каждый открытый файл, называемый документом, закрепляется за индивидуальным окном документа. Класс – TMDIChild – mdichild.h

mdidemo.rh

#define ID_MENU        100

#define CM_FILEEXIT    24338

#define CM_FILESAVEAS  24334

#define CM_FILESAVE    24333

#define CM_FILEOPEN    24332

mdidemo.rc

#include <owl\window.rh>

#include <owl\mdi.rh>

#include "mdidemo.rh"

ID_MENU MENU

BEGIN

POPUP "&File"

BEGIN

MENUITEM "&New", CM_CREATECHILD

MENUITEM "&Open", CM_FILEOPEN

MENUITEM "&Save", CM_FILESAVE

MENUITEM "Save &as", CM_FILESAVEAS

MENUITEM SEPARATOR

MENUITEM "E&xit", CM_EXIT

END

POPUP "&Window"

BEGIN

MENUITEM "&Cascade", CM_CASCADECHILDREN

MENUITEM "&Tile", CM_TILECHILDREN

MENUITEM "&Arrange icons", CM_ARRANGEICONS

MENUITEM SEPARATOR

MENUITEM "Close &all", CM_CLOSECHILDREN

END

END

mdidemo.cpp

//MDI application

#include <owl\applicat.h>

#include <owl\mdi.h>

#include <owl\mdichild.h>

#include <owl\mdi.rh>

#include <cstring.h>

#pragma hdrstop

#include "mdidemo.rh"

//The MDI child window class

class TDemoChild: public TMDIChild {

public:

TDemoChild(TMDIClient& parent);  //Default constructor

TDemoChild(TMDIClient& parent, const char far *name);

void ChangeName(const char far *name);

int Unnamed() { return filename.length() == 0; }

int OpenFile() { return TRUE; }

int SaveFile() { return TRUE; }

private:

string filename;

};

//Default constructor for File|New

TDemoChild::TDemoChild(TMDIClient& parent)

: TMDIChild(parent, "Untitled")

{

filename = "";

}

//Alternate  constructor for File|Open

TDemoChild::TDemoChild(TMDIClient& parent, const char far *name)

: TMDIChild(parent, name)

{

filename = name;

}

//Change window file name

void

TDemoChild::ChangeName(const char far *name)

{

filename = name;

SetCaption(name);

}

//The MDI client window class

class TDemoClient: public TMDIClient {

public:

TDemoClient(): TMDIClient()  {}

protected:

virtual TMDIChild* InitChild();

void CmFileOpen();

void CmFileSave();

void CmFileSaveAs();

DECLARE_RESPONSE_TABLE(TDemoClient);

};

DEFINE_RESPONSE_TABLE1(TDemoClient, TMDIClient)

EV_COMMAND(CM_FILEOPEN, CmFileOpen),

EV_COMMAND(CM_FILESAVE, CmFileSave),

EV_COMMAND(CM_FILESAVEAS, CmFileSaveAs),

END_RESPONSE_TABLE;

//Construct a child window object for File|New command

TMDIChild*

TDemoClient::InitChild()

{

return new TDemoChild(*this);

}

//Open an existing file for File|Open command

void

TDemoClient::CmFileOpen()

{

TMDIChild* cp = new TDemoChild(*this, "File Name");

cp->Create();

}

//Save window's information for File|Save command

void

TDemoClient::CmFileSave()

{

TDemoChild* cp = (TDemoChild*)GetActiveMDIChild();

if (!cp) return;

if(cp->Unnamed())

CmFileSaveAs();

else

cp->SaveFile();

}

//Name and save window's information for  File|Save as command

void

TDemoClient::CmFileSaveAs()

{

TDemoChild* cp = (TDemoChild*)GetActiveMDIChild();

if (!cp) return;

cp->ChangeName("Save as name");

cp->SaveFile();

}

// the MDI application class

class TDemoApp: public TApplication {

public:

TDemoApp(const char far* name)

: TApplication(name){}

void InitMainWindow();

private:

TDemoClient* client;

};

//Initialize the program's main window

void

TDemoApp::InitMainWindow()

{

client = new TDemoClient;

MainWindow = new TMDIFrame("MDI Application Demo",

ID_MENU, *client);

}

#pragma argsused

//Main program

int

OwlMain(int argc, char* argv[])

{

TDemoApp app("MDIDemoApp");

return app.Run();

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

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