2011-02-18 5 views
4

RichTextBox 위에 페인트를 시도하고 있지만 할 수있는 유일한 방법은 OnPaint/OnPaintBackground을 호출하는 것입니다.RichTextBox 및 UserPaint

"UserPaint"플래그가 켜져 있지 않으면이 OnPaint 또는 OnPaintBackground가 호출되지 않지만이 플래그가 켜져 있으면 텍스트 자체가 칠해지지 않습니다.

어떻게 해결할 수 있습니까?

+0

소리 야 '를 통해 페인트'어떤 종류의? 다시 색상을 변경? 텍스트 상단에 그리기? 그것 밑? –

답변

8

이것은 내가하여 RichTextBox이 그림을 처음으로 자체 처리 후 OnPaint를 호출되어 있는지 확인하는 데 사용하는 코드 :

class MyRichTextBox: RichTextBox 
{ 
    private const int WM_PAINT = 15; 
    protected override void WndProc(ref System.Windows.Forms.Message m) 
    { 
     base.WndProc (ref m); 
     if (m.Msg == WM_PAINT && !inhibitPaint) 
     { 
      // raise the paint event 
      using (Graphics graphic = base.CreateGraphics()) 
       OnPaint(new PaintEventArgs(graphic, 
       base.ClientRectangle)); 
     } 

    } 

    private bool inhibitPaint = false; 

    public bool InhibitPaint 
    { 
     set { inhibitPaint = value; } 
    } 


}