2010-06-17 53 views
5

我有一個現有的簡單的MFC應用程序,用戶指定輸入文件,輸出文件,然後是一個「處理」按鈕。我想添加這個功能,以便輸入/輸出文件是命令行參數。但是,如果它們存在,我不希望GUI出現。我只是想要執行「過程」。我看到我可以在哪裏獲得命令行參數(m_lpCmdLine),但我怎麼能繞過GUI的顯示?如果我進入應用程序,它將直接進入winmain.cpp並顯示GUI,而不會進入我的任何代碼。如果命令行選項存在,如何繞過MFC應用程序中的GUI?

回答

3

MFC設置了一個名爲C [你的App名稱]應用程序(例如CExampleApp)的類,存儲在[你的App名稱] .h/.cpp中(例如Example.h/.cpp)在這裏,你將擁有一個名爲「InitInstance」的函數(再次由MFC自動生成)。如果您已經創建了一個基於對話框的應用程序,然後你就會有一些代碼,看起來像這樣的功能:

CExampleDlg dlg; 
m_pMainWnd = &dlg; 
INT_PTR nResponse = dlg.DoModal(); 
if (nResponse == IDOK) 
{ 
    // TODO: Place code here to handle when the dialog is 
    // dismissed with OK 
} 
else if (nResponse == IDCANCEL) 
{ 
    // TODO: Place code here to handle when the dialog is 
    // dismissed with Cancel 
} 

具體的「dlg.DoModal()」調用會打電話給你的對話窗口。如果你避免這種情況,GUI將永遠不會啓動。

如果您使用的是MDI應用程序,然後你就會有一些像這樣的代碼:

// create main MDI Frame window 
CMainFrame* pMainFrame = new CMainFrame; 
if (!pMainFrame || !pMainFrame->LoadFrame(IDR_MAINFRAME)) 
    return FALSE; 
m_pMainWnd = pMainFrame; 

pMainFrame->ShowWindow(m_nCmdShow); 
pMainFrame->UpdateWindow(); 

這將創建並顯示您的主窗口。避免這種情況,並且不會創建窗口。但是您必須從InitInstance函數返回FALSE,不過或者它將進入應用程序消息泵。

+0

在我的情況下,我需要'LoadFrame()',但即使我沒有調用ShowWindow(),框架也會閃爍。我發現通過在'LoadFrame()'之前調用'CWinAppEx :: m_bLoadWindowPlacement = false;'你就沒有窗口,也沒有閃爍。 – mateuscb 2014-11-26 18:59:18

相關問題