2016-12-31 90 views
0

我想創建一個非常簡單的後臺應用程序。 我開始與空C++項目,並創建一個source.cpp文件與下面的代碼:從零開始創建C++背景MFC應用程序

#include "Windows.h" 

int WINAPI _tWinMain(HINSTANCE hInstance, 
    HINSTANCE hPrevInstance, 
    LPTSTR  lpCmdLine, 
    int  nCmdShow) 
{ 
    MSG Msg; 

    while (GetMessage(&Msg, NULL, 0, 0)) 
    { 

    } 

    return 0; 
} 

然後我設置項目的設置如下:

屬性 - >配置屬性 - >鏈接 - >系統:設置子系統:WINDOWS(/子系統:WINDOWS)

屬性 - >配置屬性 - >鏈接器 - >高級 - >設置入口點是:_tWinMain

我這樣做對嗎?另外我想將MFC庫添加到此項目中,以便可以使用MFC的功能,我該怎麼做?

感謝您的閱讀:)

編輯: 奇怪,我只需要包含 「TCHAR.H」 和錯誤[LNK1561:入口點必須定義]消失。我不需要再配置項目設置。我需要的是以下代碼:

#include "Windows.h" 
#include "tchar.h" 

int WINAPI _tWinMain(HINSTANCE hInstance, 
    HINSTANCE hPrevInstance, 
    LPTSTR  lpCmdLine, 
    int  nCmdShow) 
{ 
    //MessageBox(0, _T("test"), _T("Test"), 0); 

    return 0; 
} 
+0

我想從頭開始,所以我可以完全理解Windows進程如何運行。 – 123iamking

+0

不要擺弄入口點。保持默認狀態。如果您將其設置爲「_tWinMain」,那麼您將跳過**所需的** CRT啓動代碼。這包括靜態存儲持續時間等對象的初始化程序。如果你想了解Windows進程如何工作,請閱讀一本書(比如Russinovich的* Windows Internals *)。無論你做什麼,都不要添加MFC。這會讓它更難以理解,發生了什麼。更重要的是,如果您不熟悉C++,Windows API或MFC。 – IInspectable

+0

如果我沒有配置入口點,項目將不會生成,它會顯示錯誤:入口點必須定義,所以我按以下方式進行:http://stackoverflow.com/questions/17070367/link-fatal -error-lnk1561-entry-point-must-be-defined-error-in-vc – 123iamking

回答

2

創建SDI應用程序而不使用文檔和視圖。只檢查你需要的選項。在大多數情況下,即使是後臺應用程序也需要一個窗口來獲取窗口消息。

保留已創建的主窗口並且不顯示它,請將m_nCmdShow設置爲SW_HIDE。銷燬該主窗口將結束消息循環並停止程序。

稍後,您可以從大型機中刪除其他未使用的工具欄,例如工具欄。

另一種方法是使用嚮導創建基於對話框的應用程序。無需創建任何對話框並使用您自己的消息泵。像這樣的東西:

while (OuterCondition()) 
{ 
    while(::PeekMessage(&message, NULL , WM_MIN, WM_MAX, PM_NOREMOVE)) 
    { 
    ::AfxPumpMessage(); 
    } 
} 

而且MsgWaitForMultipleObjects可能是有用的。

您通常需要一個CWinApp對象才能正確初始化MFC。

+0

OP可能錯誤地標記了該問題。這與MFC無關,而是一個直接的Windows API問題。 – IInspectable

相關問題