使用CDE应用程序的DDE注册文件关联吗?

问题描述 投票:1回答:1

我知道SDI和MDI项目在设计上具有文件类型的概念,您可以从文件资源管理器中双击。例如:

BOOL CCommunityTalksApp::InitInstance()
{
    // Enable DDE Execute open
    EnableShellOpen();
    RegisterShellFileTypes(TRUE);

    // Process command line arguments (standard shell commands, DDE, file open)
    if (cmdInfo.m_nShellCommand == CCommandLineInfo::FileNew)
        cmdInfo.m_nShellCommand = CCommandLineInfo::FileNothing ;

    // Dispatch commands specified on the command line
    if ( !ProcessShellCommand( cmdInfo ) )
        return FALSE;
}

但是我有一个CDialog项目,其中有两个编辑器。假设我的安装程序已经注册了两个所需的文件类型关联,那么如何获得基于CDialog的应用程序以检测打开的文件并将其定向到相关的编辑器?

InitInstance中完成吗?

简而言之:

  • 用户是否双击了文件?
  • 是SRR还是MWB文件?
  • 然后将消息发布/缓存到m_pMainDlg,以使其在适当的编辑器中打开指定的文件。

我该如何处理前两个要点?

mfc file-association cdialog
1个回答
2
投票

InitInstance中完成吗?

是,您可以使用ParseCommandLine或直接处理m_lpCmdLine

用户是否双击了文件?

真的重要吗?这很难说。如果该应用是由(例如)ABC协会启动的,则可能是用户双击了一个ABC文件,也可能是他们运行了一个批处理文件并执行了start somefile.ABC或其他最终解析为带有ABC文件的ShellExecute[Ex]

是SRR还是MWB文件?

假设这些是已注册的扩展名,它们将是m_lpCmdLine中收到的完整文件名(名称+扩展名)的一部分。对于单个文件,如果调用了CCommandLineInfo::m_strFileName,则文件名也将位于CWinApp::ParseCommandLine中。

然后将消息发布/缓存到m_pMainDlg以使其在适当的编辑器中打开指定的文件。

通常从InitInstance中将文件名传递给对话框的构造函数,一旦一切就绪,对话框本身稍后将在OnInitDialog的末尾发布消息。

© www.soinside.com 2019 - 2024. All rights reserved.