[英]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
中完成的嗎?
簡而言之:
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.