现在在做一个大宗商品的行情系统的项目,我主要负责用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函数。它可以支持图形块的复制,速度很快。我们可以先在内存中作图,然后用此函数将做好的图复制到前台,同时禁止背景刷新,这样就消除了闪烁。以上也就是双缓冲绘图的基本的思路。)