DrawText in StaticCtrl Alter Text wird nicht gelöscht!
-
Hi an alle,
ich Habe ein eigenes transparentes StaticCtrl gemacht.
Den Text auf diesem Control habe ich auch einen transparenten Hintergrund verpasst.So nun dient dieses Ctrl zum Ausgabe von Texten.
Und zwar wenn ich aus einer Liste einen neuen eintrag auswähle, soll auf dem Static der Text neu ausgegeben werden. Dazu setze ich im Ctrl einfach eine Member mit dem neuen Text.
Allerdings wird in der OnPaint der neue Text einfach über den alten geschrieben was natürlich shit ist.Hier mal mein Code in der OnPaint.
void CTransparentStatic::OnPaint() { CPaintDC dc(this); CRect rcClient; GetClientRect(&rcClient); CFont pFont, *pOldFont; pFont.CreateFont(16, 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE, 0, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_ROMAN, "Times New Roman"); SetFont(&pFont); pOldFont = dc.SelectObject(&pFont); DWORD dwStyle = GetStyle(); dc.SetBkMode(TRANSPARENT); dc.SetTextColor(RGB(0,0,0)); DWORD dwText = DT_LEFT; dc.DrawText(m_sText.c_str(), rcClient, dwText); dc.SelectObject(pOldFont); ReleaseDC(&dc); } Was muss ich tun um den alten Text komplett zu überschreiben?
-
Du mußt Deinen Client-Bereich selbst löschen --> FillRect
-
Oh:D Danke ja da hast du natürlcih recht, das sollte ich tun:)
-
Dazu muss man doch gar keine eigene Klasse aufbauen.
Einfach WM_CTLCOLORSTATIC/OnCtlColor korrekt behandeln.
Bzw. ON_WM_CTLCOLOR_REFLECT, siehe TN062...BTW: Ich finde es etwas tödlich bei jedem Zeichnen den Font zu erzeugen.