3 Stimmen

Hat das Überschreiben von OnNcPaint() Auswirkungen auf das Malen des Clientbereichs eines Fensters?

Ich möchte das Aussehen der Titelleiste eines Fensters ändern, also habe ich beschlossen, die OnNcPaint() Methode der CMainFrame . Aber als ich dies tat, fand ich ein Problem. Wenn ein anderes Fenster mein Fenster verdeckt und ich das Fenster schnell ziehe, verschwindet der Inhalt des Clientbereichs meines Fensters, der erst wieder sichtbar wird, wenn ich das Ziehen stoppe.

Mein übergeordnetes OnNcPaint() ist wie unten:

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

Stimmt etwas mit meinem Ansatz nicht? Ich danke Ihnen!

5voto

Shog9 Punkte 151504

Wenn Sie nicht einen Beschneidungsbereich verwenden, der den Kundenbereich ausschließt, können Sie kann übermalen von OnNcPaint() . Wenn Ihre Zeichnungslogik also nicht so geändert werden kann, dass der Client auf andere Weise ausgeschlossen wird, sollten Sie zunächst einen geeigneten Beschneidungsbereich einrichten:

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);

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X