繁体   English   中英

将 DDE 注册的文件关联与 CDialog 应用程序一起使用?

[英]Using DDE registered file associations with CDialog app?

我知道 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以便它在适当的编辑器中打开所述文件。

我如何做前两个要点?

这是在InitInstance中完成的吗?

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

用户是否双击文件?

真的有关系吗? 说起来更复杂。 如果应用程序是由(例如)ABC 关联启动的,则可能是用户双击了一个 ABC 文件,但也可能是他们运行了一个批处理文件,该批处理文件执行了start somefile.ABC或其他任何最终解决的问题到带有 ABC 文件的ShellExecute[Ex]

是 SRR 还是 MWB 文件?

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

然后将消息发布/缓存到 m_pMainDlg 以便它在适当的编辑器中打开所述文件。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM