2012-02-10 60 views
1

我使用GCC(g ++)編譯器編譯這個小程序。結果可執行文件很好,但是當我運行它時,它出現了一個煩人的空白控制檯窗口! :(我的GUI形式後面的惱人的空白控制檯

#include <windows.h> 

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); 

static char gszClassName[] = "darkblue"; 
static HINSTANCE ghInstance = NULL; 

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { 
     WNDCLASSEX WndClass; 
     HWND hwnd; 
     MSG Msg; 

     ghInstance = hInstance; 

     WndClass.cbSize  = sizeof(WNDCLASSEX); 
     WndClass.style   = NULL; 
     WndClass.lpfnWndProc = WndProc; 
     WndClass.cbClsExtra = 0; 
     WndClass.cbWndExtra = 0; 
     WndClass.hInstance  = ghInstance; 
     WndClass.hIcon   = LoadIcon(NULL, IDI_APPLICATION); 
     WndClass.hCursor  = LoadCursor(NULL, IDC_ARROW); 
     WndClass.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); 
     WndClass.lpszMenuName = NULL; 
     WndClass.lpszClassName = gszClassName; 
     WndClass.hIconSm  = LoadIcon(NULL, IDI_APPLICATION); 

     if(!RegisterClassEx(&WndClass)) { 
       MessageBox(0, "Window Registration Failed!", "Error!", MB_ICONSTOP | MB_OK); 
       return 0; 
     } 

     hwnd = CreateWindowEx(
       WS_EX_STATICEDGE, 
       gszClassName, 
       "darkblue owNz!", 
       WS_OVERLAPPEDWINDOW, 
       CW_USEDEFAULT, CW_USEDEFAULT, 
       320, 240, 
       NULL, NULL, 
       ghInstance, 
       NULL); 

     if(hwnd == NULL) { 
       MessageBox(0, "Window Creation Failed!", "Error!", MB_ICONSTOP | MB_OK); 
       return 0; 
     } 

     ShowWindow(hwnd, nCmdShow); 
     UpdateWindow(hwnd); 

     while(GetMessage(&Msg, NULL, 0, 0)) { 
       TranslateMessage(&Msg); 
       DispatchMessage(&Msg); 
     } 
     return Msg.wParam; 
} 

LRESULT CALLBACK WndProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam) { 
     switch(Message) { 
       case WM_CLOSE: 
         DestroyWindow(hwnd); 
         break; 
       case WM_DESTROY: 
         PostQuitMessage(0); 
         break; 
       default: 
         return DefWindowProc(hwnd, Message, wParam, lParam); 
     } 
     return 0; 
} 
+0

您可以發佈的屏幕截圖的窗口? – Riskhan 2012-02-10 07:56:16

回答

3

你正在編譯代碼瞄準CONSOLE子系統,這就是爲什麼黑色控制檯窗口在您的應用程序的執行中出現。

這在GCC的默認選項,可能是因爲這很容易:您只需要幾行cout行,您可以立即在屏幕上獲得文本。使用控制檯窗口,您不必經歷創建窗口等的所有麻煩,因爲您這裏已經完成了

在這種情況下,你實際上想鏈接到WINDOWS子系統。這就是您創建典型的GUI應用程序的方式。有這樣做的方法有兩種:

  1. 您可以在命令行上-mwindows鏈接器選項。
  2. 您可以添加以下行連接標誌在你的Makefile:

    -Wl,-subsystem,windows