我开始学习WINAPI和C++,但有些不对劲?

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个实例.

我错了什么和哪里?

非常感谢你的帮助!

chr*_*ris 7

在您的窗口过程中,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]