Controls neuzeichnen
-
Hallo.
Ich habe in meiner Dialoganwendung den gesamten Hintergrund mit einer Funktion als Farbverlauf gezeichnet:
bool PaintGradient(CDC *pDC, CRect pRect, COLORREF crStart = RGB(255,0,0), COLORREF crEnd = RGB(255,255,0)) { CRect rect; rect.left = pRect.left; rect.right = pRect.right; double r = ( GetRValue(crStart) - GetRValue(crEnd) ) / static_cast<double>(pRect.bottom); double g = ( GetGValue(crStart) - GetGValue(crEnd) ) / static_cast<double>(pRect.bottom); double b = ( GetBValue(crStart) - GetBValue(crEnd) ) / static_cast<double>(pRect.bottom); for(int i = 0; i < pRect.bottom; i++) { COLORREF color = RGB( GetRValue(crStart) - (i*r) , GetGValue(crStart) - (i*g) , GetBValue(crStart) - (i*b) ); CBrush br(color); rect.top = pRect.top + i; rect.bottom = rect.top + 1; pDC->FillRect(rect, &br); } return true; }
Versucht nicht, den Code zu verstehen. Dürfte vielleicht schwer werden.
Na jedenfalls rufe ich diese Funktion in CDialog::OnPaint() auf:void CFuckingGradientDlg::OnPaint() { if (IsIconic()) { //Code weggelassen um Posting zu kürzen ;) } else { CPaintDC dc(this); // Gerätekontext für Zeichnen CRect rc; GetClientRect(&rc); PaintGradient(GetDC(), rc); ReleaseDC(GetDC()); } }
Leider werden durch diesen Code die Controls überzeichnet. Wie mache ich die ganzen Buttons etc. wieder sichtbar (wenn der Dialog z.B. verdeckt und wieder angezeigt wird)???
MfG
Happosai
-
Was machst du denn da? Nutz doch das CPaintDC dc was du erzeugt hast und nicht GetDC und auch nicht ReleaseDC. Das PaintDC released sich höchst wahrscheinlich im Destruktor selber mit EndPaint
-
void CFuckingGradientDlg::OnPaint() { if (IsIconic()) { //Code weggelassen um Posting zu kürzen ;) } else { CPaintDC dc(this); // Gerätekontext für Zeichnen CRect rc; GetClientRect(&rc); PaintGradient(&dc, rc); } }
-
CPaintDC dc(this); // Gerätekontext für Zeichnen CRect rc; GetClientRect(&rc); PaintGradient(&dc, rc); ReleaseDC(&dc);
...erzeugt leider unschöne Schlieren beim Verändern der Größe des Dialoges. Da ich aber - in diesem speziellen Fall - einen größentechnisch unveränderlichen Dialog habe, kann's mir egal sein.
Trotzdem Danke!
MfG
Happosai
-
Lass das ReleaseDC weg
-
Und du das "
" !
MfG
Happosai
-