2015-06-30 6 views
2

Обычно, чтобы нарисовать линию, мы рисуем его в 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 Class.

ответ

2

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

+0

Как я могу это сделать? –

+0

@ErfanAhmadi Я не делал этого много лет, но он выглядит примерно так: создайте DC, создайте растровое изображение, в DC выберите растровое изображение, используйте DC для рисования и в вызове 'WM_PAINT', например. ['BitBlit'] (https://msdn.microsoft.com/en-us/library/dd183370%28v=vs.85%29.aspx) для копирования с экрана вне экрана в окно DC. SEarch [MSDN] (https://msdn.microsoft.com/en-us/library/ms123401.aspx) для ссылок. –

+0

Но в моем случае я не использую растровые изображения. Я не знаю, что это связано с растровыми изображениями. –

 Смежные вопросы

  • Нет связанных вопросов^_^