简单的WinAPI应用程序有一个附加的控制台窗口 我复制了一个简单的C++ WiLAPI应用程序的骨架。它可以工作,但会创建一个附加的控制台窗口和GUI窗口。如何摆脱它?我使用的是MinGW的GCC #include <windows.h> LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); static char sClassName[] = "MyClass"; static HINSTANCE zhInstance = NULL; int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { WNDCLASSEX WndClass; HWND hwnd; MSG Msg; zhInstance = hInstance; WndClass.cbSize = sizeof(WNDCLASSEX); WndClass.style = NULL; WndClass.lpfnWndProc = WndProc; WndClass.cbClsExtra = 0; WndClass.cbWndExtra = 0; WndClass.hInstance = zhInstance; WndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION); WndClass.hCursor = LoadCursor(NULL, IDC_ARROW); WndClass.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); WndClass.lpszMenuName = NULL; WndClass.lpszClassName = sClassName; WndClass.hIconSm = LoadIcon(NULL, IDI_APPLICATION); if(!RegisterClassEx(&WndClass)) { MessageBox(0, "Error Registering Class!", "Error!", MB_ICONSTOP | MB_OK); return 0; } hwnd = CreateWindowEx(WS_EX_STATICEDGE, sClassName, "db Tutorial", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 320, 240, NULL, NULL, zhInstance, NULL); if(hwnd == NULL) { MessageBox(0, "Error Creating Window!", "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; } #包括 LRESULT回调WndProc(HWND、UINT、WPARAM、LPARAM); 静态字符sClassName[]=“MyClass”; 静态HINSTANCE zhInstance=NULL; int WINAPI WinMain(HINSTANCE HINSTANCE、HINSTANCE HPPreInstance、LPSTR lpCmdLine、int nCmdShow){ WndClass x WndClass; HWND-HWND; 味精; zhInstance=hInstance; WndClass.cbSize=sizeof(WNDCLASSEX); WndClass.style=NULL; WndClass.lpfnWndProc=WndProc; WndClass.cbClsExtra=0; WndClass.cbWndExtra=0; WndClass.hInstance=zhInstance; WndClass.hIcon=LoadIcon(空,IDI_应用程序); WndClass.hCursor=LoadCursor(空,IDC_箭头); WndClass.hbrBackground=(HBRUSH)(颜色窗口+1); WndClass.lpszMenuName=NULL; WndClass.lpszClassName=sClassName; WndClass.hIconSm=LoadIcon(空,IDI_应用程序); 如果(!RegisterClass(&WndClass)){ 消息框(0,“注册类时出错!”,“出错!”,MB_ICONSTOP|MB_OK); 返回0; } hwnd=CreateWindowEx(WS_EX_STATICEDGE,sClassName,“db教程”,WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT, 320、240、NULL、NULL、zhInstance、NULL); if(hwnd==NULL){ 消息框(0,“创建窗口时出错!”,“出错!”,MB|U ICONSTOP|MB|U OK); 返回0; } 显示窗口(hwnd、nCmdShow); 更新窗口(hwnd); while(GetMessage(&Msg,NULL,0,0)){ 翻译信息(&Msg); 发送消息(&Msg); } 返回Msg.wParam; } LRESULT回调WndProc(HWND HWND,UINT消息,WPARAM WPARAM,LPARAM LPARAM){ 开关(信息){ 案例WM_结束: 窗口(hwnd); 打破 案例WM_销毁: PostQuitMessage(0); 打破 违约: 返回DefWindowProc(hwnd、Message、wParam、lParam); } 返回0; }

简单的WinAPI应用程序有一个附加的控制台窗口 我复制了一个简单的C++ WiLAPI应用程序的骨架。它可以工作,但会创建一个附加的控制台窗口和GUI窗口。如何摆脱它?我使用的是MinGW的GCC #include <windows.h> LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); static char sClassName[] = "MyClass"; static HINSTANCE zhInstance = NULL; int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { WNDCLASSEX WndClass; HWND hwnd; MSG Msg; zhInstance = hInstance; WndClass.cbSize = sizeof(WNDCLASSEX); WndClass.style = NULL; WndClass.lpfnWndProc = WndProc; WndClass.cbClsExtra = 0; WndClass.cbWndExtra = 0; WndClass.hInstance = zhInstance; WndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION); WndClass.hCursor = LoadCursor(NULL, IDC_ARROW); WndClass.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); WndClass.lpszMenuName = NULL; WndClass.lpszClassName = sClassName; WndClass.hIconSm = LoadIcon(NULL, IDI_APPLICATION); if(!RegisterClassEx(&WndClass)) { MessageBox(0, "Error Registering Class!", "Error!", MB_ICONSTOP | MB_OK); return 0; } hwnd = CreateWindowEx(WS_EX_STATICEDGE, sClassName, "db Tutorial", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 320, 240, NULL, NULL, zhInstance, NULL); if(hwnd == NULL) { MessageBox(0, "Error Creating Window!", "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; } #包括 LRESULT回调WndProc(HWND、UINT、WPARAM、LPARAM); 静态字符sClassName[]=“MyClass”; 静态HINSTANCE zhInstance=NULL; int WINAPI WinMain(HINSTANCE HINSTANCE、HINSTANCE HPPreInstance、LPSTR lpCmdLine、int nCmdShow){ WndClass x WndClass; HWND-HWND; 味精; zhInstance=hInstance; WndClass.cbSize=sizeof(WNDCLASSEX); WndClass.style=NULL; WndClass.lpfnWndProc=WndProc; WndClass.cbClsExtra=0; WndClass.cbWndExtra=0; WndClass.hInstance=zhInstance; WndClass.hIcon=LoadIcon(空,IDI_应用程序); WndClass.hCursor=LoadCursor(空,IDC_箭头); WndClass.hbrBackground=(HBRUSH)(颜色窗口+1); WndClass.lpszMenuName=NULL; WndClass.lpszClassName=sClassName; WndClass.hIconSm=LoadIcon(空,IDI_应用程序); 如果(!RegisterClass(&WndClass)){ 消息框(0,“注册类时出错!”,“出错!”,MB_ICONSTOP|MB_OK); 返回0; } hwnd=CreateWindowEx(WS_EX_STATICEDGE,sClassName,“db教程”,WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT, 320、240、NULL、NULL、zhInstance、NULL); if(hwnd==NULL){ 消息框(0,“创建窗口时出错!”,“出错!”,MB|U ICONSTOP|MB|U OK); 返回0; } 显示窗口(hwnd、nCmdShow); 更新窗口(hwnd); while(GetMessage(&Msg,NULL,0,0)){ 翻译信息(&Msg); 发送消息(&Msg); } 返回Msg.wParam; } LRESULT回调WndProc(HWND HWND,UINT消息,WPARAM WPARAM,LPARAM LPARAM){ 开关(信息){ 案例WM_结束: 窗口(hwnd); 打破 案例WM_销毁: PostQuitMessage(0); 打破 违约: 返回DefWindowProc(hwnd、Message、wParam、lParam); } 返回0; },c++,winapi,C++,Winapi,只需使用-mwindows选项编译GUI应用程序。默认设置为-mconsole,用于创建控制台应用程序 MS链接器使用的默认启发式是:如果您的程序具有main函数,则它是一个控制台程序,但如果它具有WinMain函数,则它是一个GUI程序。但GNU工具并没有使用这一点。他们默认创建一个控制台程序。真的吗?也许你只是看到了编译器外壳。@M:这个问题的标题不清楚。我的结论是,g++本身会导致窗口出现,但不会导致编译后的窗口出现。谢谢,它做到了。我能从.cpp文本内部控制这种行为吗?@Paul:我不这

只需使用
-mwindows
选项编译GUI应用程序。默认设置为
-mconsole
,用于创建控制台应用程序


MS链接器使用的默认启发式是:如果您的程序具有
main
函数,则它是一个控制台程序,但如果它具有
WinMain
函数,则它是一个GUI程序。但GNU工具并没有使用这一点。他们默认创建一个控制台程序。

真的吗?也许你只是看到了编译器外壳。@M:这个问题的标题不清楚。我的结论是,g++本身会导致窗口出现,但不会导致编译后的窗口出现。谢谢,它做到了。我能从.cpp文本内部控制这种行为吗?@Paul:我不这么认为。AFAIK您不能从源代码向GCC传递编译器选项。