table-tree vs stock vs whiteboard
这几天牙痛的厉害,睡不着,写点东西吧。个人其实比较喜欢写cs的一些东西,比较直观,不像bs那样,做个东西,要有服务器域名啥的,尤其这些像阿里云、百度云、腾讯云啥的销售模式让人诟病,越用越贵,一年一个价格,翻倍涨,最操蛋的是那域名,搞了我几个月,还什么域名申请只能做技术记录,不能包含任何销售、产品啥字样,我想问你,我做记录,我本机的txt不能做吗?到注销那就更加操蛋了,各种骚扰威胁。
(一)表格树:这是在一家企业做的,自己独立开发的,很多年前了。表格树是基于小日本的Spread控件扩展的啊,这个控件不开源并且收费哈,而且小日本为了保护源代码,里面的命名清一色的A_1...这样式的啊,反编译下来可以说完全看不懂啊,好在它是由葡萄城这个公司代理啥的我不清楚,他们有个论坛,可以看些资料,记得当时葡萄城还邀请我去参加设计比赛,就这个表格树。当时选择扩展它有几个原因吧,第一UI还可以,第二支持一些公式,当然时间充足也可以完全基于DataGridView实现,可扩展性会更高。下面看下效果和大概实现思路吧。
细节功能还是蛮多的哈,都是自己扩展的,Spread完全没有这些接口,这个表格树核心的部分主要有两个,1.支撑它的数据结构,2.序列化之后的文件存储结构。数据结构我这边用的变种链表,文件存储结构当时用的比较简单XML格式,做了一点点处理字节做了异或操作(性能比较好),防止直接打开看内容,一些文件加密软件好像也是这么干的,简单快嘛。这里的每一行数据其实就是一个node节点,撤销操作单独维护了一个顺序表,就是这么简单。
首列还支持模糊查询,自定义图标等等操作。表格树就到这吧。
(二)Stock:Stock是基于GDI+绘制的,在.NET平台上面其实差不多就是两个阵营的选择吧,选择winform毫无疑问是GDI+实现,选择wpf就是DX实现,当然也可以使用P/Invoke或者c++来操作GDI/DX。它们都是图形api接口,gdi/gdi+有个硬伤,会闪屏,其实可以通过双缓冲+背景擦除+局部绘制可以一定程度上解决这个问题,至少一般情况下看不出来,现在的cpu计算能力又那么牛逼。无疑DX是它们三当中性能最好的,不说别的win系统上大部分游戏引擎都是基于它之上实现的。wpf图像都是由他渲染啊包括一个按钮文本,但是不要天真以为用wpf来开发游戏引擎哈,因为它对dx的集成还是比较初级的啊。当初选择gdi+主要是觉得对于stock图像绘制并没有那么复杂而且是2D,闪屏问题也能解决,wpf相较于winform抛开开发效率就是复杂庞大的图形GUI开发的优势,所以综合以上,选择winform更合适,轻巧、简单。说了这么多,先简单看下效果。
数据来源于CTP接口,具体绘制技术上也没啥好说的,调用GDI+接口完成点线的绘制,计算坐标,说起来确实比较简单,做起来还是挺麻烦的,具体看你怎么设计。绘制方面,我这边是把所有点线绘制的画板上,然后再计算变动区域,再绘制到外层画板。性能很ok,除开首次打开有一点点时间的黑屏(微乎其微),其他时候都毫无感觉,闪屏都没有,其实要解决一点点时间的黑屏问题,也很好解决,绘制出一小块区域,就把这个画板显示出来,就ok了。stock就到这吧。
(三)智慧黑板:智慧黑板之前写了一篇帖子,我这边是基于wpf实现(没写完),因为UI要求高、复杂,还有3D,所以智慧黑板用winform来做的话,有点操蛋哦,还要支持触控。GDI\GDI+应该是无能为力了,只能使用DX/OPENGL/WEBGL(这个个人理解就是OPENGL的一个子集吧),所以使用QT/ELECTRON也是两个方向吧。看下授课端的效果吧,备课端上次有写,不截图了。
颜色很清淡吧,更多里面的大部分功能还没有写,两个原因,第一没钱,有钱不是问题,第二比较难,需要精力,呵呵。下面看下最小化的效果
最小化就是一杯咖啡,后面是最小化展开操作。整个智慧黑板写下来,个人觉得有两个难点,两座大山,第一wpf画图包括3D,第二自定义文件存储格式并且兼容ppt、pptx,第二点我也看了下西沃的处理手段(在它的安装环境搜到了OPENXML库),大概是扩展开源库OPENXML实现,可能有朋友会说,安装office,通过com级别调用操作ppt、pptx,如果是这样的话,那就完蛋了。