利用GDI+在窗体上绘制线条,移动窗体到边缘后线条被擦除一部分,这个的解释是?

磊大不小 2014-08-15 09:57:38
大概知道是因为窗体在移动过程中就在不断地进行重绘?然而重绘就会丢失线条,还有将线条划在窗体上pictruebox里的位图里就不会丢失,这是怎么回事?
...全文
347 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
wjq 2014-08-18
  • 打赏
  • 举报
回复
基本上就是你自己画线不一定都在系统重绘ui之后执行。放在onpaint里是一个办法,还有个简单办法把你画好的image作为backgroundimage赋值给窗体……那么系统就会把你画的内容作为窗体的一部分自动重绘了
bdmh 2014-08-16
  • 打赏
  • 举报
回复
你自己画的东西要放到OnPaint事件中,这样在重绘时才不会丢失,设置image后,picturebox在的onpaint中会自动DrawImage(this.image, rect); 源码如下,看最后面那几句代码

protected override void OnPaint(PaintEventArgs pe)
{
    if (this.pictureBoxState[0x20])
    {
        try
        {
            if (this.WaitOnLoad)
            {
                this.Load();
            }
            else
            {
                this.LoadAsync();
            }
        }
        catch (Exception exception)
        {
            if (ClientUtils.IsCriticalException(exception))
            {
                throw;
            }
            this.image = this.ErrorImage;
        }
    }
    if (this.image != null)
    {
        this.Animate();
        ImageAnimator.UpdateFrames();
        Rectangle rect = (this.imageInstallationType == ImageInstallationType.ErrorOrInitial) ? this.ImageRectangleFromSizeMode(PictureBoxSizeMode.CenterImage) : this.ImageRectangle;
        pe.Graphics.DrawImage(this.image, rect);
    }
    base.OnPaint(pe);
}

 

jointan 2014-08-15
  • 打赏
  • 举报
回复
pictruebox的OnPaint不是你写的
jointan 2014-08-15
  • 打赏
  • 举报
回复
WM_PAINT就是这样的工作机制

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧