Gelber Balken in CEditCtrl
-
Hallo
Ich möchte gerne einen gelben Balken in meinem Edit Control einbauen (wie in UltraEdit oder Notepad++)
Folgenden Code habe ich in WM_PAINT eingebaut
HDC hdc, hdcScreenBuffer;
PAINTSTRUCT ps;
RECT rcClient;
HBITMAP hBitmap, hBmpOld;
HBRUSH hBrYellow,hBrWhite;//Start painting
hdc = ::BeginPaint(m_cEditor,&ps);hdcScreenBuffer = CreateCompatibleDC( ::GetDC(hWnd) );
::GetClientRect(m_cEditor,&rcClient);
hBitmap = CreateCompatibleBitmap(hdc,rcClient.right, rcClient.bottom = 20 );
hBmpOld = (HBITMAP) SelectObject(hdcScreenBuffer,hBitmap);
hBrYellow = CreateSolidBrush(RGB(0xFF, 0xFF, 0));
hBrWhite = CreateSolidBrush(RGB(100, 100,100));::FillRect(hdcScreenBuffer,&rcClient,hBrYellow);
BitBlt(hdc,0,yDest,rcClient.right ,rcClient.bottom ,hdcScreenBuffer,0,0,SRCAND);// Free Memory
DeleteObject(SelectObject(hdcScreenBuffer,hBmpOld));
DeleteObject(hBrYellow);
DeleteObject(hBrWhite);
DeleteDC(hdcScreenBuffer);
ReleaseDC(hdc);//Stop painting
::EndPaint(m_wndEditor,&ps);Beim ersten Click wird ein gelber Balken in die entsprechende Textzeile gezeichnet. So weit so gut.
Beim Nächsten Click wird ebenfalls ein gelber Balken an die Stelle gezeichnet. Somit habe ich pro Click einen Balken im Text.Wie kann ich es erreichen, dass der "alte" Balken verschwindet und nur der Neue zu sehen ist?
Gruss
Matthias
-
zuerst folgendes:
bitte benutze die cpp-tags um code zu posten.dein problem wird sein, dass das controll nur den berech neu zeichnet, wo der cursor ist.
Du musst also ein neuzeichnen der alten position erzwingen. Zb mit invalidateRect.BitBlt ist doch auch im globalen Namespace, sollte also auch zwei doppelpunkte spendiert bekommen.
-
Dazu muss du einen zweiten Buffer haben. Deswegen wird die Technik: Double Buffering genannt. Der zweite Buffer ist BITBLT ,,,, XOR
so kann man die Bilder beliebig ein und ausblenden. Genauer kann man sagen: Du erhälst das Original-Bild als Speicherbitmap und blittest immer eines dazu, das geht auch.
-
vlad_tepesch schrieb:
zuerst folgendes:
bitte benutze die cpp-tags um code zu posten.dein problem wird sein, dass das controll nur den berech neu zeichnet, wo der cursor ist.
Du musst also ein neuzeichnen der alten position erzwingen. Zb mit invalidateRect.BitBlt ist doch auch im globalen Namespace, sollte also auch zwei doppelpunkte spendiert bekommen.
Schwätzer!
