【问题标题】:Multiple document types in SDI application (or just a capability of MDI?)SDI 应用程序中的多种文档类型(或者只是 MDI 的一种功能?)
【发布时间】:2015-11-19 09:04:19
【问题描述】:

我有一个关于 MFC 的(可能是荒谬的)问题 - SDI 应用程序能否支持多种文档类型? (以及在创建新文档时显示“选择文档”对话框,但这不是绝对必要的,我可以自己处理。)我想要做的是我的应用程序表现得像现代办公程序,即每个新文档(某种类型)驻留在自己的应用程序实例中,而不是与其他打开的文档共享公共空间(MDI 的概念)。

如果 SDI 不能提供这样的功能(我最近的实验表明),有人可以建议我如何处理 MDI 下的“打开”命令以在应用程序的新实例中打开文件吗? (同样适用于“new”命令。)

【问题讨论】:

    标签: c++ mfc mdi sdi


    【解决方案1】:

    MFC将此应用类型称为“多个顶级文档”,您可以在MFC App Wizard中选择:

    【讨论】:

    • 您好,感谢您的建议 - 不幸的是,我使用的是 VS2010 的 Express 版本,因此没有向导。你认为你可以在某个地方分享它产生的东西吗?将不胜感激,因为我不太热衷于重新发明代码...... :-) 如果可能的话,谢谢。
    • 我当然可以共享生成的项目,但我首先建议您安装 Visual Studio 2013 社区版,它是 VS2013 Pro 的 免费 版本,具有所有功能.然后,您可以使用向导来探索不同的选项。
    【解决方案2】:

    您只需使用CWinApp::AddDocTemplate 添加文档模板 msdn 链接仅提供了带有CMultiDocTemplate 的示例,因此我在此处包含了带有CSingleDocTemplate 的示例,该示例是在您使用Visual Studio 创建新项目时生成的。

    // Register the application's document templates.  Document templates
    //  serve as the connection between documents, frame windows and views
    CSingleDocTemplate* pDocTemplate;
    pDocTemplate = new CSingleDocTemplate(
        IDR_MAINFRAME,
        RUNTIME_CLASS(CSDITestDoc),
        RUNTIME_CLASS(CMainFrame),       // main SDI frame window
        RUNTIME_CLASS(CSDITestView));
    if (!pDocTemplate)
        return FALSE;
    AddDocTemplate(pDocTemplate);
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多