0

我有一个 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);
    }
}

现在的情况是,可以随时设置此首选项,并且需要在适当的上下文中显示进一步的报告。

如何在运行时实现这一点?请帮我 :(

4

2 回答 2

1

在您的应用程序类中,从您的 CreateDocumentTemplates 函数创建并保存两个CMultiDocTemplate 指针,并使用它们按需创建您的文档(例如覆盖 ID_FILE_NEW/ID_FILE_OPEN 或类似的)。查看 CDocTemplate 的 OpenDocumentFile。

然后在您的 OnFileNew 函数或类似函数中,您可以使用如下内容: if(m_bNewView) { m_pNewDocTemplate->OpenDocumentFile(...); } else { m_pOldDocTemplate->OpenDocumentFile(...); }

于 2014-04-24T19:57:10.673 回答
1

如果您需要动态切换视图,我会将 CMyNewView 集成到 CMyView 中。如果您至少使用 Visuals Studio 2008(包括功能包),我建议您从 CTabView 派生您的视图类,以使用子窗口水平滚动条旁边的方便选项卡切换文档视图。

Visual C++ 2008 功能包示例中的 TabbedView 示例

于 2014-04-25T10:38:53.737 回答