簡體   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