?
Source2702 schrieb:
Hallo!
Ich hab einen bestehenden Code der mrrrrrrtttels OnNcPaint ein zusätzliches Icon auf die Titelleiste zeichnet. Funktioniert auch wunderbar, solange der Rahmen nicht über den DWM gezeichnet wird. Bei aktivem Aero kommt also kein Icon.
Ich hab mich im Netz schon mal schlau gemacht, allerdings außer haufenweise Posts mit dem selben Problem keine Lösung gefunden. Hat sich schon mal jemand damit beschäftigt?
Hier der Code:
void CBrushedDialog::OnNcPaint()
{
Default();
if(!(GetStyle() & WS_CAPTION))
return;
CDC *pNCDC = GetWindowDC();
//CDC *pNCDC = GetDCEx(0, DCX_WIert
CRect rect;
GetWindowRect(rect);
ScreenToClient(rect);
int nButtonWidth = GetSystemMetrics(SM_CXSIZE);
// X-Button
rect.right -= nButtonWidth * 2;
if(GetStyle() & WS_MAXIMIZEBOX)
rect.right -= nButtonWidth;
if(GetStyle() & WS_MINIMIZEBOX)
rect.right -= nButtonWidth;
::DrawIconEx(pNCDC->m_hDC, rect.right - 16, 4, m_appIcon, 0,0, 0, NULL, DI_NORMAL);
ReleaseDC(pNCDC);
}
Ich bekomme es nur hin, wenn ich das Rendern des Rahmens durch den DWM für das betreffende Fenster ausschalte:
// Schaltet das Rendern aus
// Allerdings geht der Transparenz-Effekt flöten
DWMNCRENDERINGPOLICY policy = DWMNCRP_DISABLED;
DwmSetWindowAttribute(this->m_hWnd,
DWMWA_NCRENDERING_POLICY,
(void*)&policy,
sizeof(DWMNCRENDERINGPOLICY));
// Ist diese Einstellung aktiv, müsste ich den gesamten
// Rahmen selber zeichnen. Will ich aber nicht...
BOOL bAllow = TRUE;
DwmSetWindowAttribute(this->m_hWnd,
DWMWA_ALLOW_NCPAINT,
(void*)&bAllow,
sizeof(BOOL));