博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
美化Windows Mobile上的自定义数据表
阅读量:7225 次
发布时间:2019-06-29

本文共 1568 字,大约阅读时间需要 5 分钟。

 前段时间做实验室项目,需要以报表的形式将数据展示给用户。首先想到的是visual studio自带的listview,用起来是比较方便,可是看着不美观,说白了,就是吸引力不够。于是,我想到了使用Alpha Blend来做一个半透明效果的表格。因为在今年2月份的时候,Alex Yakhnin做了一次名为《》的Webcast,给我留下的印象比较深刻,觉得对于UI部分,Alpha Blend的用处还是挺大的。

    对于图片,想要获得透明的效果,可以有两种途径。第一种,使用.NET CF中System.Drawing.Imaging命名空间下的ImageAttributes.(Color, Color)这个方法。第二种,我们可以利用平台调用来做Alpha Blending,有关Alpha Blending的一些原理,在之前的《》这个帖子中做了一些说明,这里就不再赘述。

    另外,我们可以利用色彩的渐变效果,从一种颜色逐渐过渡到另一种颜色,同样,这也可以应用到windows mobile的界面设计上去。《》这篇文章具体讲述了如何在.NET Framework下,实现渐变的填充效果,可以作为参考。

    那么,我们如何将上面的Alpha Blending和Gradient Fill应用到自己的工程里面去呢?首先,封装win32的AlphaBlend、BitBlt和GradientFill函数,做Platform invoke。然后,扩展这些方法,在方便调用的同时,也增加了用户的可读性。Alex Yakhnin已经帮我们做了这些工作,我们可以在“”这个链接中下载到源代码。解压以后,其PlatformAPI文件夹下的5个文件,就是我们需要的,如下图1所示:

图1:所需的相关P/Invoke文件

    为了突出表头和用户选定文本所在行的数据,加入了HeaderControl.cs和CustomSelectionColumn.cs这两个文件,主要作用是重载了Paint、OnPaint、OnMouseDown和OnMouseUp函数,在其中调用PlatformAPI封装好的Alpha Blending和Gradient Fill函数,实现预期的透明以及渐变的效果。

    在我们自己的工程中,可以声明一个DataGrid以及HeaderControl。

 

    在初始化控件之后,建一个DataSet,向DataSet中添加一个DataTable。然后,我们就可以设置DataTable中每一行的渐变风格了,即使用LinearGradient(color,color)函数对customColumn.SelectedGradient进行设置,自定义每一行的渐变颜色。

    同时,为了突出表头,我们也可以单独设置表头的渐变风格,即利用LinearGradient(color,color)对headerControl. BackroundGradient进行设置。

    在使用的时候,我们会发现,用户选定的行与其他行的颜色是不一样的,这是因为,在CustomSelectionColumn.cs文件的Paint重载函数中,对用户选择的行与其他行做了分类处理。

    这个表格最终的显示效果如下图2所示:

 

图2:效果图

    对于RGB颜色,除了红白蓝等显著的颜色,一般我们很难记住其数值,这里推荐一个网页: .下图3给出了部分截图。

图3:RGB数值及其颜色效果

    希望这里讲的这种方法对大家在Windows Mobile上做UI时有用。

 

参考链接:

1. 

2. 

3. 

4. 

本文转自施炯博客园博客,原文链接:http://www.cnblogs.com/dearsj001/archive/2009/07/30/WMOwnerDrawnGrid.html
,如需转载请自行联系原作者
你可能感兴趣的文章
原生Ajax
查看>>
LinkedIn 开源成功的秘密
查看>>
微软发布预览版SQL Server跨平台开发工具
查看>>
解读微软开源MMLSpark:统一的大规模机器学习生态系统
查看>>
中台之上(十三):探讨支持组装式开发的业务架构设计方法
查看>>
依赖类型语言Idris发布1.0版本
查看>>
Bowery为什么从Node.js转向 Go
查看>>
Java 20年:转角遇到Go
查看>>
JavaScript到底是面向对象还是基于对象?
查看>>
java第三方包学习之lombok
查看>>
《OpenStack 实战》内容概览与作者采访
查看>>
微软宣布公开预览其内容分发网络
查看>>
MongoDB 是如何鼓励和激励开发者社区的
查看>>
太多脚本将会毁掉持续交付
查看>>
如何在国内构建一个硅谷级的高效技术团队?
查看>>
QCon旧金山2016大会,议题发布及研讨会一瞥
查看>>
苏宁:我们开发百度小程序遇到的那些“坑”
查看>>
聊天宝彻底凉了,遭罗永浩抛弃,团队就地解散
查看>>
取代Python多进程!伯克利开源分布式框架Ray
查看>>
中台之上(八):企业级业务架构的实现需要不断沟通和调整
查看>>