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

Anmelden zum Antworten