2012-02-09 53 views
1

我最近開始了一個教程,學習如何使用Windows API編寫GUI,並且我遇到了一個我認爲很愚蠢的意外問題。我使用Code :: Blocks作爲默認的OpenWatcom編譯器,我創建了一個簡單的GUI程序編譯和鏈接。問題是,當我嘗試啓動程序時,甚至從發行版本中,像命令行一樣顯示在我的程序窗口後面,就像我試圖通過編譯代碼::塊的&運行選項運行它。有什麼辦法可以刪除命令行顯示嗎? This is how it looks like when I run it.如何從編譯的程序中刪除命令行?

編輯:這不是我的主要定義的問題。這是我的主要定義:|

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, 
LPSTR lpCmdLine, int nCmdShow)  

回答

3

在Windows中,PE可執行格式有一個標誌,指示可執行模式是「控制檯模式」還是「GUI模式」。如果是「控制檯模式」,則操作系統將在程序運行時附加一個控制檯窗口(如果需要,可以打開一個新窗口)。

在您的構建環境中會有一個鏈接器設置,用於控制您生成的EXE是否標記爲控制檯或GUI。

+0

Hegwill我發現這個選項,雖然我改變了項目選項,以便發佈文件是GUI應用程序而不是控制檯應用程序,唯一的區別是現在當我通過構建環境運行程序時,「命令行」關閉在我關閉窗口之前,命令行剛剛等待按鍵關閉......然而發佈可執行文件具有相同的結果:/ – 2012-02-09 00:14:32

+0

好吧,如果您有'dumpbin.exe'實用程序(或等價物),檢查以確保可執行文件標記爲您希望的方式。 – 2012-02-09 00:24:38

+1

對不起,我現在沒有Windows可用。另一個嘗試的方法是創建一個以正確GUI模式開始的* new *項目,並查看它是否正常工作。 – 2012-02-09 01:02:34

0

取而代之的是main功能,你需要使用Win32的標準入口點WinMain

 
int WINAPI WinMain(HINSTANCE hInstance, 
        HINSTANCE hPrevInstance, 
        LPSTR lpCmdLine, 
        int nCmdShow); 

參見:http://sol.gfxile.net/wintut/ch2.html

或者,如果您不能重新編譯,在Windows 7中,你可以這樣做:

START myProgram {}進入

參見:http://support.microsoft.com/kb/126410

+0

已經做到了。事實並非如此。也許主文件不應該命名爲main.cpp還是我錯了? – 2012-02-09 00:13:37

2

這由/SUBSYSTEM鏈接器選項控制。它目前設置爲CONSOLE,您需要將其更改爲WINDOWS。文檔任務的main需要如何改變:

應用程序並不需要一個控制檯,可能是因爲它與用戶的交互創建 自己的Windows。如果的WinMainwWinMain 被本機代碼所定義,或的WinMain(HISTANCE *,HINSTANCE *,炭 *,INT)wWinMain(HINSTANCE *,HINSTANCE *,爲wchar_t *,INT)被定義對於託管代碼,WINDOWS是默認值。

專門爲Code::Blocks,鏈接器選項可以通過this process改變:

代碼::塊只需打開項目 - >屬性對話框,切換到 「生成目標」選項卡並更改您想要修改爲「GUI應用程序」或「控制檯應用程序」的構建目標的「類型」 。不需要 擔心「主」功能。

+0

正如我上面對Greg Hegwill所做的評論所說的那樣,我已經這樣做了,重建項目但仍然會發生同樣的事情。 – 2012-02-09 00:20:26