为Windows类制作完包装程序后,我对一些文本进行了测试,以确保一切正常。但是,无论我删除还是注释掉文本“ This is a test !!!!”,在运行该程序时,在可执行文件运行期间它仍将保留在那里。

LRESULT CALLBACK WinMsgHandler(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
    {
        switch (uMsg)
        {
        case WM_PAINT:
            PAINTSTRUCT ps;
            HDC hdc;

            //hdc = BeginPaint(hwnd, &ps);

            //TextOut(hdc, 0, 0, L"This is a TEST!!!", 17);

            //EndPaint(hwnd, &ps);
            break;
        case WM_DESTROY:
            bWindowClosed = TRUE;
            break;
        case WM_CREATE:
            MessageBox(NULL, L"Create", L"test", MB_OK);
            break;
        default:
            return CBaseWindow::WinMsgHandler(hwnd, uMsg, wParam, lParam);
        }

        return 0;
    };


编辑:

这是winmain源文件。我觉得这与我将所有内容括起来的方式有关。 CDerivedWindow是包装类,用于封装大多数窗口初始化过程。

int APIENTRY _tWinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPTSTR    lpCmdLine,
                     int       nCmdShow)
{

    CDerivedWindow mainWnd(hInstance);

    WNDCLASSEX wcx;

    // Fill in the window class structure with default parameters
    wcx.cbSize = sizeof(WNDCLASSEX);                            // size of structure
    wcx.style = CS_HREDRAW | CS_VREDRAW;                        // redraw if size changes
    wcx.lpfnWndProc = CBaseWindow::stWinMsgHandler;             // points to window procedure
    wcx.cbClsExtra = 0;                                         // no extra class memory
    wcx.cbWndExtra = 0;                                         // no extra window memory
    wcx.hInstance = hInstance;                                  // handle to instance
    wcx.hIcon = LoadIcon(NULL, IDI_APPLICATION);                // predefined app. icon
    wcx.hCursor = LoadCursor(NULL, IDC_ARROW);                  // predefined arrow
    wcx.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);    // white background brush
    wcx.lpszMenuName = NULL;                                    // name of menu resource
    wcx.lpszClassName = L"True Wild";                           // name of window class
    wcx.hIconSm = LoadIcon(NULL, IDI_APPLICATION);              // small class icon

    initSprites();

    // register the window
    if (mainWnd.RegisterWindow(&wcx))
    {
        DWORD dwError = 0;
        DWORD dwStyle = WS_OVERLAPPEDWINDOW | WS_VISIBLE;
        RECT rc;

        rc.top = 100;
        rc.left = 100;
        rc.right = SCREEN_WIDTH;
        rc.bottom = SCREEN_HEIGHT;

        // create the window and start the message loop
        // we will get kicked out of the message loop when the window closes
        if (mainWnd.Create(dwStyle, &rc))
        {
            // message loop
            MSG msg;


            //game Loop
            while (TRUE)
            {
                while(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
                {
                    // Translate the message and dispatch it to WindowProc()
                    TranslateMessage(&msg);
                    DispatchMessage(&msg);

                    if (mainWnd.IsWindowClosed())
                        return 0;

                }


                //Run game code
                render();
            }
            return 0;
        }
        else
            return -1;
    }
    else
        return -2;

    return 0;
}


编辑答案1:

// the message handler for this window
LRESULT CALLBACK WinMsgHandler(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    switch (uMsg)
    {
    case WM_DESTROY:
        bWindowClosed = TRUE;
        break;
    default:
        return DefWindowProc(hwnd, uMsg, wParam, lParam);
    }

    return DefWindowProc(hwnd, uMsg, wParam, lParam);
};

最佳答案

如果不处理WM_PAINT,则应将其传递给DefWindowProc()以验证工作区并重新绘制窗口。

看来您正在打破开关/案例并返回0。我将替换为:

return 0;




return DefWindowProc(hwnd, uMsg, wParam, lParam);

关于c++ - 重建后Win32 Paint Text仍然存在,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13537695/

10-09 00:27