MyException - 我的异常网
当前位置:我的异常网» C# » 请教各位大师,怎么在c#工程中不使用第三方插件或组

请教各位大师,怎么在c#工程中不使用第三方插件或组件实现多图层的处理

www.MyException.Cn  网友分享于:2015-02-11  浏览:0次
请问各位大师,如何在c#工程中不使用第三方插件或组件实现多图层的处理?
请问各位大师,如何在c#工程中不使用第三方插件或组件实现多图层的处理?实现在 最底下放一个图层放置背景图(建筑平面图),然后在上面透明的图层上的不同位置放置方块,请求各位大师的帮忙!!谢谢!
------解决思路----------------------
多个图层实际上可以是多次绘图叠加,而上层的透明分量,决定下层透出的程度。
比如下例,上层圆圈部分有个从透明到紫色的渐变(Color.Transparent -> Color.Violet)。你可以观测俩个图层的叠加效果。


public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        this.DoubleBuffered = true;
        this.Load += delegate
        {
            using (Graphics gb = Graphics.FromImage(background)) 
            using (Graphics gf = Graphics.FromImage(foreground)) 
            using (LinearGradientBrush brush = new LinearGradientBrush(Point.Empty, new Point(200, 200), Color.Transparent, Color.Violet))
            { 
                gb.CopyFromScreen(Point.Empty, Point.Empty, background.Size); 
                gf.FillEllipse(brush, new Rectangle(Point.Empty, new Size(200,200)));
                gf.DrawString("用上下左右键来移动前景", this.Font, Brushes.Black, new PointF(20, 100));
            }
        };
        this.KeyDown += delegate(object sender, KeyEventArgs e)
        {
            Point offset = Point.Empty;
            switch (e.KeyCode)
            {
                case Keys.Left:  offset.X -= 5; break;
                case Keys.Right: offset.X += 5; break;
                case Keys.Up:    offset.Y -= 5; break;
                case Keys.Down:  offset.Y += 5; break;
            }
            if (offset != Point.Empty) 
            {
                Rectangle oldRect = this.rect;
                this.rect.Offset(offset);
                this.Invalidate(Rectangle.Union(oldRect, this.rect)); 
            }
        };
    }

    protected override void OnPaint(PaintEventArgs e)
    {
        e.Graphics.DrawImage(background, this.ClientRectangle);  // 先画下层
        e.Graphics.DrawImage(foreground, rect);  // 再叠加上层...
    }

    Rectangle rect = new Rectangle(50, 50, 200, 200);
    Bitmap background = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height);
    Bitmap foreground = new Bitmap(200, 200);
}

------解决思路----------------------
WPF 和 Silverlight 是专门针对 2d 甚至 3d 富媒体、动画、交互操作程序进行开发的平台,并且你要熟练使用 Blend 工具(而不仅仅是 vs 工具)。

winform 不是,在winform下如果你想开发一个专业点的上图系统,你自然只能想到“第三方”。
------解决思路----------------------
例如这个组织结构图程序,http://developer.51cto.com/art/201207/346850.htm,它没有纠结在底层,只是把坐标计算清楚就行了,其它的绘图部分用 silverlight(wpf代码基本上完全一样) 就搞定了。支持用户交互操作,例如拖放等等!如果你只是开始研究“绘图底层”的代码,你何年何月才能开始真正开始这样一个小程序的开发呢?

而这个例子是非常简单的。稍微复杂一点的程序,例如给领导看的辅助决策系统,肯定比这个复杂100倍,需要有几十种类、上千个业务图层(在WPF/Silverlight中其实不叫图层,而叫控件)叠加在画布上,并且支持用户的命中、拖放等等交互操作,支持根据各种远程通讯而驱动的控件状态变化(例如一个抢救车辆掉头行进、或者一个地下管线压力和方向的实时变化)。相当于一个简单的游戏了。如果你只会 winform,然后又说“不用第三方”,你何年何月才能开发一个简单的产品呢?

在开发桌面程序方面,我们可以没有程序员,但不存在只会winform的程序员。
------解决思路----------------------
实际上,你需要的不是“第三方”,而是一个2d动画系统的框架。比如说你创建一个Polygon对象,然后扔给画布当中,然后你在polygon对象的每一个拐点上放上一个动画闪烁的Circle对象,然后捕获每一个圆点的拖放操作,拖放时自动修改(编辑)Polygon 的外边,并且实时看到用户拖放修改Polygon的各个拐点的交互界面。这一切需要你写多少代码?

写100行代码已经算是不少了。绝不要再使用没有生产力的编程工具平台去“玩一玩儿底层”了,要以生产力来选择开发工具。
------解决思路----------------------
引用:
目前只有两层,显示底层图片,显示放置了一些方块的上层,不涉及任何操作,所以希望做到用C#但不使用第三方,您再帮忙看看!!!多谢!!


我知道这是个很简单的、10分钟的练习程序。我说的是这种程序开发,你的“根儿”在哪里。
------解决思路----------------------
GDI+绘制,N层也没有问题。甚至缩放、移动,点击交互相应等等

文章评论

老美怎么看待阿里赴美上市
老美怎么看待阿里赴美上市
 程序员的样子
程序员的样子
亲爱的项目经理,我恨你
亲爱的项目经理,我恨你
我跳槽是因为他们的显示器更大
我跳槽是因为他们的显示器更大
10个帮程序员减压放松的网站
10个帮程序员减压放松的网站
为什么程序员都是夜猫子
为什么程序员都是夜猫子
聊聊HTTPS和SSL/TLS协议
聊聊HTTPS和SSL/TLS协议
为啥Android手机总会越用越慢?
为啥Android手机总会越用越慢?
程序员和编码员之间的区别
程序员和编码员之间的区别
写给自己也写给你 自己到底该何去何从
写给自己也写给你 自己到底该何去何从
老程序员的下场
老程序员的下场
程序员眼里IE浏览器是什么样的
程序员眼里IE浏览器是什么样的
Google伦敦新总部 犹如星级庄园
Google伦敦新总部 犹如星级庄园
5款最佳正则表达式编辑调试器
5款最佳正则表达式编辑调试器
那些争议最大的编程观点
那些争议最大的编程观点
我的丈夫是个程序员
我的丈夫是个程序员
中美印日四国程序员比较
中美印日四国程序员比较
程序员的鄙视链
程序员的鄙视链
那些性感的让人尖叫的程序员
那些性感的让人尖叫的程序员
每天工作4小时的程序员
每天工作4小时的程序员
总结2014中国互联网十大段子
总结2014中国互联网十大段子
团队中“技术大拿”并非越多越好
团队中“技术大拿”并非越多越好
程序员必看的十大电影
程序员必看的十大电影
60个开发者不容错过的免费资源库
60个开发者不容错过的免费资源库
程序员都该阅读的书
程序员都该阅读的书
程序员的一天:一寸光阴一寸金
程序员的一天:一寸光阴一寸金
“肮脏的”IT工作排行榜
“肮脏的”IT工作排行榜
程序员最害怕的5件事 你中招了吗?
程序员最害怕的5件事 你中招了吗?
当下全球最炙手可热的八位少年创业者
当下全球最炙手可热的八位少年创业者
如何成为一名黑客
如何成为一名黑客
2013年美国开发者薪资调查报告
2013年美国开发者薪资调查报告
一个程序员的时间管理
一个程序员的时间管理
科技史上最臭名昭著的13大罪犯
科技史上最臭名昭著的13大罪犯
程序员应该关注的一些事儿
程序员应该关注的一些事儿
我是如何打败拖延症的
我是如何打败拖延症的
看13位CEO、创始人和高管如何提高工作效率
看13位CEO、创始人和高管如何提高工作效率
鲜为人知的编程真相
鲜为人知的编程真相
初级 vs 高级开发者 哪个性价比更高?
初级 vs 高级开发者 哪个性价比更高?
什么才是优秀的用户界面设计
什么才是优秀的用户界面设计
程序员周末都喜欢做什么?
程序员周末都喜欢做什么?
2013年中国软件开发者薪资调查报告
2013年中国软件开发者薪资调查报告
Web开发人员为什么越来越懒了?
Web开发人员为什么越来越懒了?
“懒”出效率是程序员的美德
“懒”出效率是程序员的美德
如何区分一个程序员是“老手“还是“新手“?
如何区分一个程序员是“老手“还是“新手“?
Java 与 .NET 的平台发展之争
Java 与 .NET 的平台发展之争
旅行,写作,编程
旅行,写作,编程
做程序猿的老婆应该注意的一些事情
做程序猿的老婆应该注意的一些事情
Java程序员必看电影
Java程序员必看电影
要嫁就嫁程序猿—钱多话少死的早
要嫁就嫁程序猿—钱多话少死的早
软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有