MDI 应用程序 MFC 中文档的多个视图
Posted
技术标签:
【中文标题】MDI 应用程序 MFC 中文档的多个视图【英文标题】:Multiple Views for a Document in MDI Application MFC 【发布时间】:2014-04-24 19:13:49 【问题描述】:我有一个 MDI 应用程序,其中有一些报告,这些报告以 MFC 打印体系结构提供的方式打印和打印预览。
但现在情况发生了变化,报告需要格式化为 html 文件,并且需要根据偏好以不同的视角显示。我选择了基于应用程序架构的解决方案,因为我的 CWinApp 中有许多文档/视图。在那里创建了所有文档/视图模板,一旦应用程序启动,将根据设置创建新的文档/视图。
class CMyWinApp: public CWinApp
public:
virtual BOOL InitInstance();
protected:
BOOL CMyWinApp::InitInstance()
// Lot of Code Here
CreateDocumentTemplates();
void CMyWinApp::CreateDocumentTemplates()
// Some Other Doc/Templates are here
if(m_bNewView) // Based on the Setting I am creating the new View and Old Doc
pDocTemplate = new CMultiDocTemplate(
IDR_REPORTS,
RUNTIME_CLASS(CMyDoc),
RUNTIME_CLASS(CMyFrame), // custom MDI child frame
RUNTIME_CLASS(CMyNewView));
pDocTemplate->SetContainerInfo(IDR_TYPE_CNTR_IP);
AddDocTemplate(pDocTemplate);
else // This is a Old View and Doc
pDocTemplate = new CMultiDocTemplate(
IDR_REPORTS,
RUNTIME_CLASS(CMyDoc),
RUNTIME_CLASS(CMyFrame), // custom MDI child frame
RUNTIME_CLASS(CMyView));
pDocTemplate->SetContainerInfo(IDR_TYPE_CNTR_IP);
AddDocTemplate(pDocTemplate);
现在的情况是,可以随时设置此首选项,并且需要在适当的上下文中显示更多报告。
如何在运行时实现这一点?请帮帮我:(
【问题讨论】:
你应该关注 imbtfab 的回答。另一种方法是对视图进行就地切换,这不是那么简单。 【参考方案1】:在您的应用程序类中,从您的 CreateDocumentTemplates 函数创建并保存 两个 CMultiDocTemplate 指针,并使用这些指针按需创建您的文档(例如覆盖 ID_FILE_NEW/ID_FILE_OPEN 或类似的)。查看 CDocTemplate 的 OpenDocumentFile。
然后在您的 OnFileNew 函数或类似函数中,您可以使用如下内容:
if(m_bNewView)
m_pNewDocTemplate->OpenDocumentFile(...);
else
m_pOldDocTemplate->OpenDocumentFile(...);
【讨论】:
注意:创建一个新视图,但它也创建一个新文档。这不仅仅是 same 文档的另一个视图【参考方案2】:如果您需要动态切换视图,我会将 CMyNewView 集成到 CMyView 中。如果您至少使用 Visuals Studio 2008(包括功能包),我建议您从 CTabView 派生视图类,以使用子窗口水平滚动条旁边的方便选项卡切换文档视图。
【讨论】:
令人难以置信的简单而优雅的解决方案。谢谢你这样指点我。以上是关于MDI 应用程序 MFC 中文档的多个视图的主要内容,如果未能解决你的问题,请参考以下文章
如何让您的 MDI MFC 应用程序在任务栏中显示一个实例?