2013-04-26 221 views
1

我有這個非常簡單的C++類,它只是打開一個空白的Windows窗口,但我注意到,每次我雙擊.exe,它會打開窗口,但它也會打開命令提示符窗口也是。 有沒有簡單的方法來阻止這個命令提示窗口發生的快速簡單的方法&?C++可執行文件打開命令窗口

乾杯提前,

KS。

#include <windows.h> 

const char g_szClassName[] = "myWindowClass"; 

// Step 4: the Window Procedure 
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) 
{ 
    switch(msg) 
    { 
     case WM_LBUTTONDOWN: 
     { 
      char szFileName[MAX_PATH]; 
      HINSTANCE hInstance = GetModuleHandle(NULL); 

      GetModuleFileName(hInstance, szFileName, MAX_PATH); 
      MessageBox(hwnd, szFileName, "This program is:", MB_OK | MB_ICONINFORMATION); 
     } 
     break; 
     case WM_CLOSE: 
      DestroyWindow(hwnd); 
     break; 
     case WM_DESTROY: 
      PostQuitMessage(0); 
     break; 
     default: 
      return DefWindowProc(hwnd, msg, wParam, lParam); 
    } 
    return 0; 
} 

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

    //Step 1: Registering the Window Class 
    wc.cbSize  = sizeof(WNDCLASSEX); 
    wc.style   = 1; 
    wc.lpfnWndProc = WndProc; 
    wc.cbClsExtra = 0; 
    wc.cbWndExtra = 0; 
    wc.hInstance  = hInstance; 
    wc.hIcon   = LoadIcon(NULL, IDI_APPLICATION); 
    wc.hCursor  = LoadCursor(NULL, IDC_ARROW); 
    wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); 
    wc.lpszMenuName = NULL; 
    wc.lpszClassName = g_szClassName; 
    wc.hIconSm  = LoadIcon(NULL, IDI_APPLICATION); 



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

    // Step 2: Creating the Window 
    hwnd = CreateWindowEx(
     WS_EX_CLIENTEDGE, 
     g_szClassName, 
     "WinApp-2", 
     WS_OVERLAPPEDWINDOW, 
     CW_USEDEFAULT, CW_USEDEFAULT, 240, 120, 
     NULL, NULL, hInstance, NULL); 

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

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

    // Step 3: The Message Loop 
    while(GetMessage(&Msg, NULL, 0, 0) > 0) 
    { 
     TranslateMessage(&Msg); 
     DispatchMessage(&Msg); 
    } 
    return Msg.wParam; 
} 
+1

您沒有C++類。 C++是一種多範式語言,並非所有東西都是對象或類。你的特定代碼中沒有任何類。 – 2013-04-26 15:58:27

回答

5

剛剛與/SUBSYSTEM:WINDOWS選項,而不是/SUBSYSTEM:CONSOLE鏈接。

如果您當前正在讓編譯器調用鏈接器,則可能需要將/c轉換爲cl.exe以僅編譯,然後在生成的目標文件上調用link.exe /SUBSYSTEM:WINDOWS

相關問題