标题:panel 如何实现双缓冲区绘图
只看楼主
perfume
Rank: 1
等 级:新手上路
帖 子:51
专家分:7
注 册:2007-7-24
结帖率:25%
已结贴  问题点数:10 回复次数:7 
panel 如何实现双缓冲区绘图
panel 如何实现双缓冲区绘图
搜索更多相关主题的帖子: 缓冲区 
2011-01-18 10:24
perfume
Rank: 1
等 级:新手上路
帖 子:51
专家分:7
注 册:2007-7-24
得分:0 
简单说:
我想实现火焰切割的动态仿真。
首先根据加工零件绘制加工图形,然后根据返回数据动态仿真
如图

 2.JPG (19.27 KB)
 
 fangzhen.JPG (20.53 KB)
 


现在我是这么做的。
在定时器里panel1.refrsh();
private void panel1_Paint(object sender, PaintEventArgs e)
        {
            Graphics g = e.Graphics;
            g.DrawImage(bmp, 20, 20);            
            p2.X = (int)((Parameter.GInfo.X - drawImage.xMin) * drawImage.ScaleFactor + 20);
            p2.Y = (int)(drawImage.Height - (Parameter.GInfo.Y - drawImage.yMin) * drawImage.ScaleFactor + 20);
            Graphics gg = Graphics.FromImage(bmpp);
            gg.DrawLine(drawPen, p1.X, p1.Y, p2.X, p2.Y);
            g.DrawEllipse(pennn, Convert.ToInt32(p2.X - 3), Convert.ToInt32(p2.Y - 3), 6, 6);
            g.FillEllipse(new SolidBrush(Color.Chartreuse), Convert.ToInt32(p2.X - 3),
                Convert.ToInt32(p2.Y - 3), 6, 6);            
            p1 = p2;
            g.DrawImage(bmpp, 0, 0);            
        }

这样会一直闪。
应该怎么做,详细点,别光说个双缓冲区完了。具体怎么实现,panel怎么不能setstyle.

2011-01-18 10:25
yangglemu
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:273
专家分:521
注 册:2006-9-15
得分:10 
容器类控件不能双缓冲绘图

试着挣个威望!
2011-01-18 13:21
yangglemu
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:273
专家分:521
注 册:2006-9-15
得分:0 
有的人是这样减少面板控件绘制闪烁的:
在面板上放一个GroupBox,设置边框为无,再将其它控件放到它上面,开启窗体双缓冲,就没有闪烁现象了

试着挣个威望!
2011-01-18 13:24
perfume
Rank: 1
等 级:新手上路
帖 子:51
专家分:7
注 册:2007-7-24
得分:0 
回复 3楼 yangglemu
原来如此,谢谢。

2011-01-18 14:53
perfume
Rank: 1
等 级:新手上路
帖 子:51
专家分:7
注 册:2007-7-24
得分:0 
回复 4楼 yangglemu
好像还有啊

2011-01-18 15:00
vxbb
Rank: 6Rank: 6
等 级:侠之大者
帖 子:163
专家分:440
注 册:2008-8-18
得分:0 
回复 6楼 perfume
程序代码:
  直接设置双缓冲没效果的,自定义控件然后设置,
  其他代码我去掉了,你看看吧

using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using System.Drawing;
using namespace ScreenShotTools
{
    /// <summary>
    /// 自定义颜色呈现标签,可选色
    /// </summary>
    internal class ColorLabel:Control
    {

        public ColorLabel()
            : base()
        {
            SetStyles();
        }

  

        private void SetStyles()
        {
            base.SetStyle(
                ControlStyles.UserPaint |
                ControlStyles.OptimizedDoubleBuffer |
                ControlStyles.AllPaintingInWmPaint |
                ControlStyles.ResizeRedraw, true);
            base.UpdateStyles();
        }

    }
}

QQ:491697374  Mail:vxbb@
2011-02-10 10:43
小楼浪子
Rank: 1
等 级:新手上路
帖 子:11
专家分:9
注 册:2011-3-2
得分:0 
这个在学习中。

【桑拿0755|www.
2011-03-02 18:17



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-331242-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.098896 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved