WEB开发网
开发学院软件开发VC VC和MFC的一些常见问题 阅读

VC和MFC的一些常见问题

 2010-07-25 20:46:33 来源:WEB开发网   
核心提示:如何得到当前视图?最佳方法是将视图当作一个参数来传递,如果不能这样做,VC和MFC的一些常见问题(3),但你确信它是当前激活文档和当前激活视图的话,你也可以得到该视图,但是当你不用文档 / 视图结构时,你确实会失去一些特性,具体细节见Visual C++文章Q108587《Get Current CDocument o

如何得到当前视图?

最佳方法是将视图当作一个参数来传递。如果不能这样做,但你确信它是当前激活文档和当前激活视图的话,你也可以得到该视图。具体细节见Visual C++文章Q108587《Get Current CDocument or CView from Anywhere》。

简单说来,用:
   ((CFrameWnd*) AfxGetApp()->m_pMainWnd))->GetActiveDocument()
和:
   ((CFrameWnd*)(AfxGetApp()->m_pMainWnd))->GetActiveView()
来得到文档和视图。一个好的方法是将它们封装在你的CMyDoc和CMyView类的静态函数中,并且核对它们是否属于正确的RUNTIME_CLASS。然而,假如这个视图不是当前激活视图或者你在运行OLE本地激活,这样将不成功。

如何在一个文档中建立多个视图?

CDocTemplate::CreateNewFrame()函数创建MFC MDI应用程序中的文档的附加视图。为了调用该函数,要指定一个指向CDocument对象(指将为之建立视图的文档)的指针和一个指向可从中复制属性的框架窗口的指针。一般情形下,该函数的第二个参数为NULL。

当应用程序调用函数CreateNewFrame()时,该函数就创建一个框架窗口和在该窗口内的视图。框架窗口和它的视图的类型由与CreateNewFrame()函数调用指定的文档相关的文档摸板(CDocTemplate)决定。

Visual C++中的CHKBOOK MFC样例程序也演示了如何为文档建立附加的框架和视图。检查CHKBOOK.CPP文件中的CChkBookApp::OpenDocumentfile()函数。

另一个用函数CreateNewFrame()的例子是MULTVIEW样本程序。

CreateNewFrame()函数建立了一个框架和一个视图,而不仅仅是一个视图。假如CreateNewFrame()函数不能完全符合你的需要,可参考CreateNewFrame()函数的源程序来了解对建立结构和视图所必须的步骤。

如何在MDI程序中得到所有的视图?

你必须用一些文档中没有记载的函数:

 CDocument::GetFirstViewPosition(); // DOCCORE.CPP
 CDocument::GetNextView(); // DOCCORE.CPP
 CMultiDocTemplate::GetFirstDocPosition(); // DOCMULTI.CPP
 CMultiDocTemplate::GetNextDoc(); // DOCMULTI.CPP

你还需要与CWinApp的成员m_templateList打交道。

注意:在MFC 版本4.0中已改变。现在已经有一个叫CDocManager的类可以帮助你显示所有的视图和文档。请参考《MFC Internals》获得更详细的信息。

如何建立一个可用鼠标拉动的CScrollView类

在CIS上从MSMFC库下载AUTOSV.LZH。这个程序告诉你如何实现一个辅助消息循环来管理鼠标的活动,并提供了钩挂来对代码进行定制。这是一个免费软件。

一定要用视图/文档结构吗?

MFC并不一定要求你使用文档/视图结构。查看HELLO、 MDI和HELLOAPP例子―它们就没有用那种结构。大多数MFC特性都可以在非文档/视图应用程序中得到运用。但是当你不用文档 / 视图结构时,你确实会失去一些特性,例如打印预览和许多OLE特性。

上一页  1 2 3 4 5  下一页

Tags:VC MFC 一些

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接