2012-06-22 3 views
0

Я хочу, чтобы нарисовать белую линию в моем окне:Цвет линий не меняется?

case WM_PAINT: 
    { 
     hdc=GetDC(hWnd); 
     SelectObject(hdc, GetStockObject(WHITE_BRUSH)); 
     MoveToEx(hdc, 0, 0, 0); 
     LineTo(hdc, 100, 100); 
     ReleaseDC(hWnd, hdc); 
    } 

но цвет остается черным. Что не так?

+0

Кстати, вы должны использовать BeginPaint/EndPaint здесь, не GetDC/ReleaseDC. EndPaint() очищает область обновления, и если вы этого не сделаете, вы будете продолжать получать сообщения WM_PAINT снова и снова. – BrendanMcK

ответ

3

Вы пытаетесь установить кисть для своей линии, когда вы должны использовать ручку. Кисть используется для заполнения внутренней части фигуры, в то время как ручка используется для рисования линий.

MSDN says это про ручки:

Перо это графический инструмент, который приложение может использовать для рисования линий и кривых . Чертежные приложения используют ручки для рисования линий прямой линии, прямые линии и кривые.

И this о кисти:

Кисточки это графический инструмент, который приложения используют для рисования интерьера многоугольников, эллипсов, и путей.

Ваш код должен был бы быть чем-то больше, как это:

case WM_PAINT: 
{ 
    PAINTSTRUCT ps; 
    hdc=BeginPaint(hWnd, &ps); // Used instead of GetDC in WM_PAINT 
    HPEN hPen = CreatePen(PS_SOLID, 1, RGB(255,255,255)); 
    HPEN hOldPen = SelectObject(hdc, hPen); 
    MoveToEx(hdc, 0, 0, 0); 
    LineTo(hdc, 100, 100); 
    SelectObject(hdc, hOldPen); 
    DeleteObject(hPen); 
    EndPaint(hWnd, &ps); // Used instead of ReleaseDC in WM_PAINT 
} 
+2

Вы также можете использовать 'GetStockObject (WHITE_PEN)'. –

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