Рисование линии за пределами WM_PAINT

Обычно, чтобы нарисовать линию, мы рисуем ее в WM_PAINT.

LRESULT CALLBACK Display::DisplayWindowProc(HWND hWnd,UINT msg,WPARAM wParamm,LPARAM lParam)
{
    HDC hdc;
    PAINTSTRUCT ps;

    switch(msg)
    {
    case WM_PAINT:
        hdc = BeginPaint(hWnd,&ps);
        MoveToEx(hdc,0,0,0);
        LineTo(hdc,100,100);
        EndPaint(hWnd,&ps);
        return 0;
    case WM_DESTROY:
        PostQuitMessage(0);
        return 0;
    }
    return DefWindowProc( hWnd, msg, wParamm, lParam);
}

Но я хочу рисовать линию, когда захочу, простой пример:

int WINAPI WinMain
(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
PSTR cmdLine,
int showCmd
)
{
    //Do Other Things
    Display dislpay;
    display.DrawLine();
    //Do Other Things
}

Моя программа объектно-ориентирована, и я отображаю вещи в классе Display, и мне было интересно, могу ли я сделать линию рисования в такой функции, как DrawLine() в классе Display.


person Erfan Ahmadi    schedule 30.06.2015    source источник


Ответы (1)


Вы можете создать DC вне экрана, выбрать растровое изображение соответствующего размера и использовать его для рисования в любое время. Затем WM_PAINT вы перешли из внеэкранного DC в Windows DC.

person Some programmer dude    schedule 30.06.2015
comment
@ErfanAhmadi Я не делал этого много лет, но это происходит примерно так: создайте DC, создайте растровое изображение, в DC выберите растровое изображение, используйте DC для рисования и в WM_PAINT вызовите, например. BitBlit для копирования с офф. -экран DC в окно DC. Ищите ссылки в MSDN. - person Some programmer dude; 30.06.2015
comment
Но в моем случае я не использую растровые изображения. Я не знаю, какое это имеет отношение к растровым изображениям. - person Erfan Ahmadi; 30.06.2015
comment
@ErfanAhmadi DC - это просто контекст, он собирает все, что нужно для рисования, ручки, цвета и то, на чем можно рисовать, и именно здесь появляется растровое изображение. Вам нужно растровое изображение, иначе вам не на чем рисовать. Окно имеет растровое изображение на экране, на котором можно рисовать. Подумайте об этом так: рисование линии — это просто установка некоторых битов в памяти, но вам нужно немного памяти для реальных битов, и это то, что предоставляет растровое изображение. Вы выбираете растровое изображение (или перо или кисть для рисования), используя SelectObject. Пожалуйста, переходите по ссылкам и читайте. - person Some programmer dude; 30.06.2015