2010-11-15 95 views
1

我有一個現有的MFC應用程序,我試圖擴展接受命令行參數並運行無人蔘與。MFC - 擴展應用程序從命令行運行

我需要在之後啓動一些事件InitInstance()已完成並且現有的GUI已完全加載。我看過winmain.cpp,但是我不清楚如何運行我的事件,因爲它似乎啓動了一個線程並從調試器中'消失'(即接下來要執行什麼?必須是MFC循環,對嗎?是否有可能掛鉤?)我對此很陌生,完全有可能我錯過了更高級別的洞察力,這並非易事。感謝指針。

謝謝。

回答

0

你可以重載的PreTranslateMessage比跳過的郵件有

1

我會分析命令行中InitInstance就像往常一樣,但不是立即處理所有找到的命令,你所關心的那些添加一些特殊的處理(例如)將消息發回給自己的消息隊列,所以當你準備好開始處理消息時,它們將首先顯示出來。

爲了做到這一點,我想大概派生一類從CComandLineInfo,並覆蓋ParseParam來處理你所關心的命令(並將其發送給它不承認任何其他參數回CComandLineInfo::ParseParam被正常處理)。使用自定義命令行分析器

// Parse command line for standard shell commands, DDE, file open 
CCommandLineInfo cmdInfo; 
ParseCommandLine(cmdInfo); 

隨着一個:然後,在InitInstance中,代替這段代碼

MyCommandLineInfo cmdInfo; 
ParseCommandLine(cmdInfo); 

ParseCommandLine然後將調用您ParseParam在命令行上的每一個參數,給你第一次有機會決定它的含義以及如何處理它。你可能想要查看CComandLineInfo已經理解的「標準」命令,並且讓它們保持單獨,除非你真的真的需要改變它們。

1

攔截命令行參數的最簡單方法是引用全局變量__targv(定義爲LPCTSTR* __targv或類似的東西)和__argc(定義爲int)。

例如:

for(int i = 0; i < __argc; ++i) { 
    DoSomethingWithArg(__targv[i]); 
} 

基本上就像任何其他控制檯應用程序。

相關問題