2009-03-01 13 views
0

開発中C#アプリケーションWindows MobileOnPaintでカスタムコントロールを持っています。をオーバーライドして、ユーザーがポインタで移動するイメージを描画します。それはイメージですイメージを表示するカスタムコントロール

 

protected override void OnPaint(PaintEventArgs e) 
{ 
    Graphics gxOff; //Offscreen graphics 
    Brush backBrush; 

    if (m_bmpOffscreen == null) //Bitmap for doublebuffering 
    { 
     m_bmpOffscreen = new Bitmap(ClientSize.Width, ClientSize.Height); 
    } 

    gxOff = Graphics.FromImage(m_bmpOffscreen); 

    gxOff.Clear(Color.White); 

    backBrush = new SolidBrush(Color.White); 
    gxOff.FillRectangle(backBrush, this.ClientRectangle); 

    //Draw some bitmap 
    gxOff.DrawImage(imageToShow, 0, 0, rectImageToShow, GraphicsUnit.Pixel); 

    //Draw from the memory bitmap 
    e.Graphics.DrawImage(m_bmpOffscreen, this.Left, this.Top); 

    base.OnPaint(e); 
} 
 

imageToShow:私自身のOnPaintメソッドはこれです。

は、それがこのようにイベントさらにonResizeに初期化されますrectImageToShow

 
rectImageToShow = 
    new Rectangle(0, 0, this.ClientSize.Width, this.ClientSize.Height); 
 

this.Topthis.Leftは、カスタムコントロール内の画像を描画するTOPLEFTコーナーです。

私はそれがうまくいくと思いますが、画像を移動すると決してすべてのコントロールをきれいにしません。私はいつも前の図の一部を見る。

私は間違っていますか?

ありがとうございました!

答えて

2

私はあなたがコントロールの画像バッファをクリアしていないと思います。バックバッファのみをクリアしました。 2つのDrawImage呼び出しの間にこれを試してください:

e.Graphics.Clear(Color.White); 

残っている画像を最初にクリアする必要があります。


また、あなたはバックバッファとバックバッファへの上に描かれているすべてのものが、その後、正確に画面上にペイントされたので、それを書き換えることができます(0、0)ので、何か問題があるため、バックバッファの描画のものであろう間にどこかではなく論理である。このような

何か:

Graphics gxOff; //Offscreen graphics 
Brush backBrush; 

if (m_bmpOffscreen == null) //Bitmap for doublebuffering 
{ 
    m_bmpOffscreen = new Bitmap(ClientSize.Width, ClientSize.Height); 
} 

// draw back buffer 
gxOff = Graphics.FromImage(m_bmpOffscreen); 

gxOff.Clear(Color.White); 

backBrush = new SolidBrush(Color.White); 

gxOff.FillRectangle(backBrush, this.Left, this.Top, 
    this.ClientRectangle.Width, 
    this.ClientRectangle.Height); 

//Draw some bitmap 
gxOff.DrawImage(imageToShow, this.Left, this.Top, rectImageToShow, GraphicsUnit.Pixel); 

//Draw from the memory bitmap 
e.Graphics.DrawImage(m_bmpOffscreen, 0, 0); 

base.OnPaint(e); 

それが正しいですが、あなたのアイデアを得る必要があるかどうかわかりません。

+0

このファイルは次のファイルで使用できます。 e.Graphics.Clear(Color.White); – VansFannel