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 Text
Weiß 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(); }