用 WINAPI 创建一个实心矩形

时间:2021-01-28 00:15:19

标签: windows winapi

我使用 Win32 API 创建了一个窗口,带有一个绘制的文本和一个按钮。如果按钮被按下,它将被删除,并且文本应该被一个填充的矩形覆盖。

按钮消失效果很好,但是矩形的位置就是按钮的位置。无论我是否更改以下值:

RECT rect = { 50, 120, 450, 15 };
LRESULT CALLBACK MainWndProc(HWND hWnd, UINT uiMessage, WPARAM wParam, LPARAM lParam)
{
    static HWND hWndButton;
    static HWND hWndEditBox;
    switch (uiMessage)
    {
    case WM_CREATE:
        hWndButton = CreateWindow(TEXT("BUTTON"), TEXT("Los geht's !"),
            WS_CHILD | WS_VISIBLE | BS_DEFPUSHBUTTON,
            240, 50, 120, 40, hWnd,
            reinterpret_cast<HMENU>(BTN_MAIN_BUTTON_ID),
            reinterpret_cast<HINSTANCE>(GetWindowLongPtr(hWnd, GWL_HINSTANCE)),
            NULL);
        return (0);

    case WM_PAINT: {
        PAINTSTRUCT ps;
        HDC hdc = BeginPaint(hWnd, &ps);
        SetBkMode(hdc, TRANSPARENT);
        SetTextColor(hdc, RGB(0, 0, 0));
        SetTextAlign(hdc, TA_CENTER);
        TextOut(hdc, 300, 10, TEXT("Bitte legen Sie ihr Mitarbeiterprofil an."), lstrlen(TEXT("Bitte legen Sie ihr Mitarbeiterprofil an.")));
        EndPaint(hWnd, &ps);
        return (0); }

    case WM_COMMAND:
        if (wParam == BTN_MAIN_BUTTON_ID)
        {
            DestroyWindow(hWndButton);

            PAINTSTRUCT ps2;
            HDC hdc = BeginPaint(hWnd, &ps2);
            RECT rect = { 50, 120, 450, 15 };
            HBRUSH brush = CreateSolidBrush(RGB(50, 151, 151));
            GetClientRect(hWnd, &rect);
            FillRect(hdc, &rect, brush);
            DeleteObject(brush);
            EndPaint(hWnd, &ps2);

            int i;
            char string[20];
            for (i = 0; i< profilEinheiten; i++)
            {
                hWndEditBox = CreateWindow(
                    TEXT("EDIT"), TEXT("Edit Boxes"),
                    WS_VISIBLE | WS_CHILD,
                    100, 40+(20*i), 100, 15, hWnd,
                    (HMENU)IDC_EDITBOX_TEXT,
                    (HINSTANCE)GetWindowLong(hWnd, GWL_HINSTANCE),
                    NULL);
            }
            return (0);
            break;
        }
        break;
    case WM_DESTROY:
        PostQuitMessage(0);
        return (0);
    }
    return (DefWindowProc(hWnd, uiMessage, wParam, lParam));
}

0 个答案:

没有答案