FillRect ничего не будет рисовать - PullRequest
1 голос
/ 02 мая 2010

Я пытаюсь создать простое окно в Win32 и нарисовать в нем прямоугольник, но по какой-то причине FillRect не работает для меня. Вот мой источник:

#include <windows.h>
#include "resource.h"

RECT rect;

LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    static PAINTSTRUCT ps;
    static HDC hDC;

    switch(msg)
    {
        case WM_PAINT:
            hDC = BeginPaint(hWnd, &ps);

            FillRect(hDC, &rect, (HBRUSH)(COLOR_WINDOW+1));

            EndPaint(hWnd, &ps);
        break;

        case WM_CLOSE:
            DestroyWindow(hWnd);
        break;

        case WM_DESTROY:
            PostQuitMessage(0);
        break;

        default:
            return DefWindowProc(hWnd, msg, wParam, lParam);
    }
    return 0;
}


int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
    WNDCLASSEX wc;
    HWND hWnd;
    MSG msg;
    rect.left = 0;
    rect.right = 0;
    rect.top = 100;
    rect.bottom = 100;

    wc.cbSize        = sizeof(WNDCLASSEX);
    wc.style         = 0;
    wc.lpfnWndProc   = WndProc;
    wc.cbClsExtra    = 0;
    wc.cbWndExtra    = 0;
    wc.hInstance     = hInstance;
    wc.hIcon         = LoadIcon(NULL, IDI_APPLICATION);
    wc.hCursor       = LoadCursor(NULL, IDC_ARROW);
    wc.hbrBackground = (HBRUSH)(COLOR_ACTIVEBORDER+1);
    wc.lpszMenuName  = MAKEINTRESOURCE(IDR_MAIN_MENU);
    wc.lpszClassName = "Main";
    wc.hIconSm       = LoadIcon(NULL, IDI_APPLICATION);

    RegisterClassEx(&wc);

    hWnd = CreateWindowEx(NULL, "Main", "Main", WS_SYSMENU | WS_MINIMIZEBOX, CW_USEDEFAULT, CW_USEDEFAULT, 240, 360, NULL, NULL, hInstance, NULL);

    ShowWindow(hWnd, nCmdShow);
    UpdateWindow(hWnd);

    while(GetMessage(&msg, NULL, 0, 0) > 0)
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }

    return msg.wParam;
}

Что-то я пропускаю или делаю неправильно в моем коде? Заранее спасибо

1 Ответ

3 голосов
/ 02 мая 2010

Ваш код в порядке. Проблема в том, что у вас есть rect.left = 0 и rect.right = 0, а rect.top и rect.bottom также одинаковы. Таким образом, ваш прямоугольник имеет размер 0

Попробуйте это

rect.left = 0; 
rect.right = 100; 
rect.top = 0; 
rect.bottom = 100;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...