nei*_*mad -1 c++ winapi visual-c++
我尝试做的WinMain出了问题.我在Windows C++编程中完全是noob,我试着学习.我跟着一个tutoriel来帮助我.但是看起来不行!这是我的代码..
#include <Windows.h>
LRESULT CALLBACK WindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
HWND hWnd;
WNDCLASSEX wc;
ZeroMemory(&wc, sizeof(WNDCLASSEX));
wc.cbSize = sizeof(WNDCLASSEX);
wc.style = CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = WindowProc;
wc.hInstance = hInstance;
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH)COLOR_WINDOW;
wc.lpszClassName = "WindowClass1";
RegisterClassEx(&wc);
hWnd = CreateWindowEx(NULL, "WindowClass1", "Our First Windowed app", WS_OVERLAPPEDWINDOW, 300, 300, 500, 400, NULL, NULL, hInstance, NULL);
ShowWindow(hWnd, SW_SHOW);
MSG msg;
while(GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
//return 0;
}
LRESULT CALLBACK WindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch(message)
{
case WM_DESTROY:
{
PostQuitMessage(0);
return 0;
} break;
}
}
Run Code Online (Sandbox Code Playgroud)
当我编译时,我没有错误,但是当我运行应用程序时,我的任务栏中只有应用程序图标,仅此而已.在任务管理器中,我看到该应用程序的2个实例.
我错了什么和哪里?
非常感谢你的帮助!
在您的窗口过程中,DefWindowProc永远不会被调用,因此您根本不处理您未处理的消息.这包括让您的窗口显示并像普通窗口一样运行的一些必需品.对于这种default情况,一个很好的选择是在您的交换机的情况下,所有其他情况都具有该消息的必要返回值:
switch (message) {
case SOME_MESSAGE:
//...
return 0;
case SOME_OTHER_MESSAGE:
//...
return 1; //not all messages should return 0; check each one's docs
default: //all unhandled messages
return DefWindowProc(hWnd, message, wParam, lParam);
}
Run Code Online (Sandbox Code Playgroud)
提高警告级别.您应该得到以下内容(至少在GCC上,我确定MSVC有类似的东西):
警告:控制到达非空函数的末尾[-Wreturn-type]