CEdit?
-
Hi,
ich möchte ein mehrzeiliges CEditfeld mit Trennlinien zwischen den Textzeilen,
also dacht ich mir ich leite eine eigene Klasse von CEdit ab und setze in
dessen Paint-Methode die Zeichenfunktion. Soweit geht das alles ja auch, aber
wenn man das Feld scrollt werden nur noch die Linien gezeichnet aber nicht
mehr der TextWeiß einer Rat?
void CMyEdit::OnPaint() { CPaintDC dc(this); //- CDC * pcdc= GetDC(); CPen pen; pen.CreatePen(PS_SOLID,1,RGB(150,150,150)); CPen * ppen= pcdc->SelectObject(&pen); //- CRect r; GetClientRect(&r); int pos_y = GetScrollPos(SB_VERT); //vertikale scroll-pos TEXTMETRIC Metrics; pcdc->GetOutputTextMetrics(&Metrics); int schrift_h = Metrics.tmHeight; //schrifthöhe //- int count=0; while(count < r.bottom) { if(count >= pos_y) { pcdc->MoveTo(r.left,count); pcdc->LineTo(r.right,count); } count+=schrift_h; } //- pcdc->SelectObject(ppen); pen.DeleteObject(); //- CEdit::OnPaint(); } void CMyEdit::OnEnHscroll() { OnPaint(); } void CMyEdit::OnEnVscroll() { OnPaint(); } void CMyEdit::OnEnChange() { OnPaint(); }
-
Versuchs mal mit einem Invalidate statt mit dem direkten Aufruf von OnPaint.
-
mit Invalidate() kommt nun gar kein Text mehr, der Cursor rückt zwar weiter aber wie gesagt, kein text
void CMyEdit::OnEnHscroll() { //OnPaint(); Invalidate(); } void CMyEdit::OnEnVscroll() { //OnPaint(); Invalidate(); } void CMyEdit::OnEnChange() { //OnPaint(); Invalidate(); }