您的位置:首页 > 其它

框架窗口和文档、视图的交互(MFC)

2011-11-07 18:52 323 查看
框架窗口与文档的交互:

a、框架窗口 -> 文档 的过程:

1、通过视图。视图都由与之关联的文档,而框架窗口是视图的容器,理所当然,框架窗口和文档的交互可以以视图为桥梁。在框架窗口中可以通过GetActiveView()可以得到活动视图的指针pView,接着pView->GetDocument()便可以得到与之关联的文档指针pDoc。利用这个指针框架窗口便可以对文档进行相关的操作。

2、通过唯一的应用程序对象。框架窗口、文档和视图都是应用程序对象的组成部分,应用程序对象中也有相关的方法来操作这些成员。首先通过全局函数AfxGetApp()取得唯一的全局应用程序对象pApp,然后用pApp获得获得第一个文档模板:

POSITION pos = pApp->GetFirstDocTemplatePosition();

接着通过遍历文档模板及其相应的文档取得相要的文档对象的指针:

while(pos)

{

CDocTemplate* pTemplate = pApp->GetNextDocTemplate(pos);

POSITION pos2 = pTemplate->GetFitstDocPosition();

while(pos) //里层遍历,寻找特定的文档。

{

CDocument* pDoc = pTemplate->GetNextDoc(pos2);

//省略对文档的处理代码

}

}

b、文档 -> 框架窗口 的过程:

文档要想“主动”跟框架窗口套近乎也是要通过视图为桥梁。

POSITION pos = GetFirstViewPosition(); //在文档中,取得文档的第一个获得视图

while(pos) //遍历所有视图,取得视图相应的容器,及框架窗口

{

CView* pView = GetNextView(pos);

CFrameWnd* pFrame = pView->GetParentFrame();

if(pFrame)

{

pFrame->m_nWindow = -1; //由于一个框架窗口可能对于多个视图,所以要为具有同一个容器的视图标记,使得处理框架窗口时只处 //理一次

}

}

//第二重循环

pos = GetFirstViewPosition();

int nNumber = 0;

while(pos)

{

CView *pView = GetNextView(pos);

CFrame* pFrame = pView->GetParentFrame();

if(pFrame->m_nWindow = nNumber)

{

pFrame->m_nWindow = nNumber;

nNumber++;

}

}

//对每个框架窗口只处理一次

pos = GetFirstViewPosition();

int nIndex = 0;

while(pos)

{

CView *pView = GetNextView(pos);

CFrameWnd * pFrame = pView->GetPatentFrame();

if(pFrame && pFrame->m_nWindow == nIndex)

{

//处理框架窗口代码、、、、、、

nIndex++;

}

}

框架窗口和视图的交互:

1、每个框架窗口都维护一个活动视图,通过GetActiveView()可以获得活动视图的指针。

2、获得当前活动文档,然后通过该文档获得视图。

3、获得应用程序对象,然后获得文档模板,进而获得文档模板的文档,最后获得视图。

以上三种方法均可以获得视图对象,进行想要的交互活动。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: