C# CF, WinForms 및 이중 버퍼


1

양식에 PictureBox가있는 CF 2.0 앱이 있습니다. 마우스를 움직여서 PictureBox를 움직이고 자 할 때 깜박 거리지 않도록 Double Buffer를 폼에 추가해야합니다.

어떻게하면됩니까?

감사합니다.

5

양식을 이중 버퍼링 할 필요가 없으므로 PB가 필요합니다. CF에서는 그렇게 쉽게 도달 할 수 없습니다. 그러나, 당신은 자신의 컨트롤을 만들 수 있습니다, PB는 매우 간단합니다. 예를 들면 :

using System; 
using System.Drawing; 
using System.Windows.Forms; 

public class MyPictureBox : Control { 
    private Image mImage; 
    public Image Image { 
    get { return mImage; } 
    set { mImage = value; Invalidate(); } 
    } 
    protected override void OnPaintBackground(PaintEventArgs pevent) { 
    //Do nothing 
    } 
    protected override void OnPaint(PaintEventArgs e) { 
    using (Bitmap bmp = new Bitmap(this.ClientSize.Width, this.ClientSize.Height)) { 
     using (Graphics bgr = Graphics.FromImage(bmp)) { 
     bgr.Clear(this.BackColor); 
     if (mImage != null) bgr.DrawImage(mImage, 0, 0); 
     } 
     e.Graphics.DrawImage(bmp, 0, 0); 
    } 
    base.OnPaint(e); 
    } 
} 

는 희망, 내가 CF에서 사용할 수없는 물건 ...

  0

PB를 사용하지 않았다? PB의 의미는 무엇입니까? 22 feb. 092009-02-22 17:21:12

  0

PB == PictureBox. 22 feb. 092009-02-22 17:29:53

  0

작동하지 않습니다. 전체 PictureBox를 움직이기 때문에 양식에 이중 버퍼가 필요합니다 (제 생각에는). 22 feb. 092009-02-22 17:59:35

  0

이것은 올바른 코드입니다.하지만 이렇게해야하는 컨테이너 (예 : 패널)를 생성해야합니다. 최악의 시나리오는 그림 상자를 수동으로 드로잉하고 패널 내부에서 제어하는 ​​사용자 지정 그림을 스왑해야한다는 것입니다. 23 feb. 092009-02-23 15:33:13

  0

시간이 걸리는 복잡한 것을 그릴 때 매력처럼 작동합니다. 비트 맵을 미리 할당하고 필요한 경우 (Form.ResizeEnd에서) 크기를 조정하고 비트 맵에 물건 (1000s의 점으로 스플라인)을 그리고 비트 맵을 PB에 그립니다. 31 aug. 152015-08-31 16:14:47