代码- c# 重绘问题 求解答 doc.drawobjectlist 怎么获取

问题描述

c# 重绘问题 求解答 doc.drawobjectlist 怎么获取

由于刚学习c#,窗口全屏的时候,控件自适应移动位置,在移动的时候出现严重闪烁,自己查了一下,用双缓冲效果不大,所以用重绘,但是代码完全看不懂。。。求解答,doc.drawobjectlist是从哪里获取的?

 Rectangle rect = e.ClipRectangle;
            Bitmap bufferimage = new Bitmap(this.Width, this.Height);
            Graphics g = Graphics.FromImage(bufferimage);
            g.Clear(this.BackColor);
            g.SmoothingMode = SmoothingMode.HighQuality; //高质量
            g.PixelOffsetMode = PixelOffsetMode.HighQuality; //高像素偏移质量
            foreach (IShape drawobject in doc.drawObjectList)
            {
                if (rect.IntersectsWith(drawobject.Rect))
                {
                    drawobject.Draw(g);
                    if (drawobject.TrackerState == config.Module.Core.TrackerState.Selected
                        && this.CurrentOperator == Enum.Operator.Transfrom)//仅当编辑节点操作时显示图元热点
                    {
                        drawobject.DrawTracker(g);
                    }
                }

            }
            using (Graphics tg = e.Graphics)
            {
                tg.DrawImage(bufferimage, 0, 0);  //把画布贴到画面上
            }

解决方案

drawobjectlist是示例代码中文档中画布上的图形对象,doc和drawObjectList都是为了演示而写的。

解决方案二:

在一个真实的程序中,我们往往使用MVC设计模式,将文档(描述数据)和视图(将数据呈现出来)分开。而不是将绘图的代码写死。
这样你的程序可以方便地修改文档结构,并且通知程序刷新。
foreach (IShape drawobject in doc.drawObjectList)
这是遍历文档中所有的图元(或者说抽象的形状,IShape)
rect.IntersectsWith(drawobject.Rect)
这里是做一个判断,只绘制可见区域内的,以便提高性能

时间: 2024-08-31 16:18:23

代码- c# 重绘问题 求解答 doc.drawobjectlist 怎么获取的相关文章

c++-C++代码有什么问题啊 求解答

问题描述 C++代码有什么问题啊 求解答 为什么编译器提示 Line3: error: expected unqualified-id before ';' token 解决方案 templete是用来修饰函数的,它后面不要分号. 你也可以写在一行 templete <typename T> T max(T a, T b) { } 不知道为什么大家都喜欢写2行,是不是都是受谭浩强的误导. 解决方案二: template模版定义后面不需要引号,你去掉就可以了 解决方案三: max前面是不是少了&

代码-报错:ORA-12505 求解答

问题描述 报错:ORA-12505 求解答 报错:java.sql.SQLException: Listener refused the connection with the following error: ORA-12505, TNS:listener does not currently know of SID given in connect descriptor (有两个类,一个是登录类,一个是登录的处理类) 主要代码:(登录类) protected void doGet(HttpS

eb agic java-WebMagic不支持官方的xpath表达式吗?为什么我的代码会报错?求高人指点

问题描述 WebMagic不支持官方的xpath表达式吗?为什么我的代码会报错?求高人指点 我想获取节点的父节点的link,我按官方文档写出如下表达式,为什么成员运行会抛出异常呢? page.getHtml().xpath("//img/parent::a").links().all(); 异常信息如下: org.jsoup.select.Selector$SelectorParseException: Could not parse query 'parent::*': unexpe

winform模拟post问题,求解答,谢谢

问题描述 后台模拟post操作,一段时间操作太快服务器会返回需要输入验证码,但是我不知道怎么获取验证码的url,甚至不知道带验证码情况下post的data的内容,导致没法继续操作.由于速度达不到后台操作这种速度,所以遇不到这种情况没法用httpwatch抓,求解答,应该怎么获取相关的验证码信息 解决方案 解决方案二:能控制速度还是控制速度吧,获取验证码所要做的工作绝对比控制速度来的复杂的多解决方案三:引用1楼xdashewan的回复: 能控制速度还是控制速度吧,获取验证码所要做的工作绝对比控制速

JAVA代码编译出错:找不到符号,求解答

问题描述 JAVA代码编译出错:找不到符号,求解答 源代码: package com.tarena.shoot; import java.util.Random; //Airplane----敌机既是飞行物, public class Airplane extends FlyingObject implements Enemy{ private int speed = 2;//敌机走步的步数 public Airplane(){ image = ShootGame.airplane; width

point-JAVA题目,求解答,求代码!!!!

问题描述 JAVA题目,求解答,求代码!!!! 设计一个Point类,类中包含点的坐标x.y,同时,包含一个通过另一个点求两点之间距离的distance(Point p)方法.利用该类实现点(34)到点(56)的距离. 解决方案 坐等大神解答...... 解决方案二: public class Point { private int xValue; private int yValue; public Point(int xValue int yValue) { this.setxValue(x

代码-缓存流的问题,新手求解答

问题描述 缓存流的问题,新手求解答 import java.io.*; public class Student { public static void main(String[] args) { // TODO Auto-generated method stub String[] content={"好久不见","你好吗","常联系"}; File file=new File("word.txt"); try{ File

滚动条代码-vs中编写了个关于垂直滚动条的代码,其中有几处不理解,求解答

问题描述 vs中编写了个关于垂直滚动条的代码,其中有几处不理解,求解答 这是代码: #include #include"resource.h" LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { static char szAppName

graphics-急求怎么实现单击按钮重绘面板啊

问题描述 急求怎么实现单击按钮重绘面板啊 就是我写了一个jframe类 里面定义了a1,a2,a3等几个面板,然后我又写了一个JPanel类,jpanel类写了一个paint()方法,主要是实现画一条曲线的功能,然后我在jframe类里面定义a1=new jpanel():然后运行jframe 的时候a1面板就自动加载了一天曲线,我现在想实现的是 在jframe里面加上一个按钮,单击按钮,给jpanel传参--也就是传入两个数组分别作为x.y轴的数据 然后重绘,同时单击按钮后,要面板的曲线重绘成