C# GDI+绘制行情系统 —— 行情Listview功能分析(1)

本文探讨了一个使用C#和GDI+开发的大宗商品行情系统,分析了大智慧行情系统的功能特点,尤其是Listview组件的交互功能,如调整列宽、滚动条、冻结列和排序。文章详细讲解了通过GDI+实现列宽调整的复杂性,涉及双缓冲技术和鼠标交互逻辑,提出了一种高效存储列边界信息的方法,利用颜色编码来判断鼠标位置和列信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

现在在做一个大宗商品的行情系统的项目,我主要负责用C#做客户端。由于不是特别了解相关的模式,所以下载了目前比较主流的行情系统——大智慧。观察和分析一下他的界面和功能。这是他的主界面



通过资源监视器查看进程dzh2.exe关联的模块,可以看出其使用的是GDI 和 GDI+技术



主要的功能分析有以下几点(只是简要分析出主要的功能,项目并没那么高要求)

1.可以调整列宽

2.支持滚动条(我认为这个是比较难的,不止是简单的平移,因为功能3)

3.类似Excel的冻结窗口,在滚动的时候('序号','代码','名称')三列是冻结的(所以并不能简单的平移整个图像)

4.点击列标题的时候对当前列数据进行升序或降序排列

5.根据开盘价或数据项正负动态的调整字体颜色(大家了解过股票的话都知道红色是涨,绿色是跌,灰色是持平)

6.单击某一行记录时出现一个选择的标志(如上图我选择的第9行数据,那么第9行数据下方会出现一条行线)

7.双击某一行记录时跳转到该行记录对应商品的行情走势画面(这个也属于我的负责范围,不过下篇再说这个吧,只是分析一下Listview的功能)


(关于GDI+的相关资料麻烦各位看官去MSDN查阅,我就不在这里误导大家,因为我也只是会用而已)

说实话个人感觉GDI+绘制的图像具有交互功能是一件非常复杂的事情。

举个简单的例子:如果绘制一条水平线,让他具有能通过鼠标拖动的交互功能。(如下图)



说到GDI+,就不得不提到双缓冲技术,不想看详细说明请略过这一段,后面我会简单的说一下。

(转自百度百科——在图形图象处理编程过程中,双缓冲是一种基本的技术。我们知道,如果窗体在响应WM_PAINT消息的时候要进行复杂的图形处理,那么窗体在重绘时由于过频的刷新而引起闪烁现象。解决这一问题的有效方法就是双缓冲技术。因为窗体在刷新时,总要有一个擦除原来图象的过程OnEraseBkgnd,它利用背景色填充窗体绘图区,然后在调用新的绘图代码进行重绘,这样一擦一写造成了图象颜色的反差。当WM_PAINT的响应很频繁的时候,这种反差也就越发明显。于是我们就看到了闪烁现象。我们会很自然的想到,避免背景色的填充是最直接的办法。但是那样的话,窗体上会变的一团糟。因为每次绘制图象的时候都没有将原来的图象清除,造成了图象的残留,于是窗体重绘时,画面往往会变的乱七八糟。所以单纯的禁止背景重绘是不够的。我们还要进行重新绘图,但要求速度很快,于是我们想到了使用 BitBlt函数。它可以支持图形块的复制,速度很快。我们可以先在内存中作图,然后用此函数将做好的图复制到前台,同时禁止背景刷新,这样就消除了闪烁。以上也就是双缓冲绘图的基本的思路。)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值