Влияет ли переопределение OnNcPaint () на рисование клиентской области окна? - PullRequest
2 голосов
/ 08 января 2009

Я хочу изменить внешний вид строки заголовка окна, поэтому я решил переопределить OnNcPaint() метод CMainFrame. Но когда я это сделал, я обнаружил проблему. Если есть другое окно, закрывающее мое окно, и я быстро перетаскиваю окно, содержимое клиентской области моего окна исчезло, что стало видно только после того, как я остановил перетаскивание.

Мой переопределенный OnNcPaint(), как показано ниже:

void CMainFrame::OnNcPaint()
{
    CDC* pWinDC = GetWindowDC();
    //do some drawing
    ReleaseDC(pWinDC);
}

Что-то не так с моим подходом? Спасибо!

1 Ответ

4 голосов
/ 08 января 2009

Если вы не используете область отсечения, настроенную для исключения клиентской области, вы можете закрасить ее из OnNcPaint(). Итак ... если ваша логика рисования не может быть изменена для исключения клиента каким-либо другим способом, сначала установите соответствующую область отсечения:

CRect rect;
GetWindowRect(&rect);
ScreenToClient(&rect);
CRect rectClient;
GetClientRect(&rectClient);
rectClient.OffsetRect(-rect.left, -rect.top);
rect.OffsetRect(-rect.left, -rect.top);
pWinDC->ExcludeClipRect(&rectClient);
// ...
// draw stuff here
// ...
pWinDC->SelectClipRgn(NULL);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...