Loc*_*ock 1 c# compact-framework winforms windows-mobile-6.5
我正在使用Psion的SDK在移动设备上提供签名控制.我想在签名控件(这是一个图片框)周围绘制一个矩形.我已将以下内容放入Paint事件中,但问题是它闪烁(当您在图片框中登录时,图片框会不断刷新.
有没有办法把它放到表单的load事件中,所以它只加载一次?我知道它需要有PainEventArgs,但我对此并不十分肯定.
private void scSignature_Paint(object sender, PaintEventArgs e)
{
e.Graphics.DrawRectangle(new Pen(Color.Black, 2f), 0, 0,
e.ClipRectangle.Width - 1,
e.ClipRectangle.Height - 1
);
}
Run Code Online (Sandbox Code Playgroud)
谢谢
在CF中绘画时防止闪烁和垃圾创建的提示:
Graphics如果你有多个操作,不要直接画给你.而是创建一个Bitmap缓冲区,绘制到该缓冲区,然后将该Bitmap的内容绘制到GraphicsBitmap绘制位置到#2中的缓冲区,然后绘制动态项目在您的情况下,这些建议可能如下所示:
class Foo : Form
{
private Bitmap m_background;
private Bitmap m_backBuffer;
private Brush m_blackBrush;
private Pen m_blackPen;
public Foo()
{
m_blackBrush = new SolidBrush(Color.Black);
m_blackPen = new Pen(Color.Black, 2);
// redo all of this on Resize as well
m_backBuffer = new Bitmap(this.Width, this.Height);
m_background = new Bitmap(this.Width, this.Height);
using (var g = Graphics.FromImage(m_background))
{
// draw in a static background here
g.DrawRectangle(m_blackBrush, ...);
// etc.
}
}
protected override void OnPaintBackground(PaintEventArgs e)
{
}
protected override void OnPaint(PaintEventArgs e)
{
using (var g = Graphics.FromImage(m_backBuffer))
{
// use appropriate back color
// only necessary if the m_background doesn't fill the entire image
g.Clear(Color.White);
// draw in the static background
g.DrawImage(m_background, 0, 0);
// draw in dynamic items here
g.DrawLine(m_blackPen, ...);
}
e.Graphics.DrawImage(m_backBuffer, 0, 0);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2378 次 |
| 最近记录: |