GUI表单后面的空白控制台很烦人



我使用GCC(g++)编译器编译这个小程序。结果可执行文件很好,但当我运行它时,它会出现一个令人讨厌的空白控制台窗口!:(

 #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;
}

您正在编译针对CONSOLE子系统的代码,这就是为什么在执行应用程序时会出现黑色控制台窗口的原因。

这是GCC中的默认选项,可能是因为它很容易开始:您只需要几行cout,就可以立即在屏幕上获得文本。使用控制台窗口,您不必像在这里所做的那样,经历创建窗口等所有麻烦。

在这种情况下,您实际上想要链接到WINDOWS子系统。这就是创建典型GUI应用程序的方式。有两种方法:

  1. 可以在命令行中指定-mwindows链接器选项
  2. 您可以在makefile中的链接器标志中添加以下行:

    -Wl,-subsystem,windows
    

相关内容

  • 没有找到相关文章

最新更新