美化Windows Mobile上的自定义数据表

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

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

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

那么,我们如何将上面的Alpha Blending和Gradient Fill应用到自己的工程里面去呢?首先,封装win32的AlphaBlend、BitBlt和GradientFill函数,做Platform invoke。然后,扩展这些方法,在方便调用的同时,也增加了用户的可读性。Alex Yakhnin已经帮我们做了这些工作,我们可以在“ListViewDemo.zip”这个链接中下载到源代码。解压以后,其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颜色,除了红白蓝等显著的颜色,一般我们很难记住其数值,这里推荐一个网页:RGB.txt decoded .下图3给出了部分截图。

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

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

参考链接:

1. 24 Hours of Windows Mobile Application Development: Creating Compelling and Attractive UIs for Windows Mobile Applications

2. Alpha Blending and Alpha Channel on Windows Mobile

3. How to: Display a Gradient Fill

4. RGB.txt decoded

时间: 2024-12-19 01:46:17

美化Windows Mobile上的自定义数据表的相关文章

Microsoft Azure 上的自定义数据和 Cloud-Init

http://blog.csdn.net/azurechina/article/details/27106071 自定义数据是什么? 客户经常询问如何才能在配置Microsoft Azure 虚拟机时插入脚本或其他元数据.在其他云中,这个概念通常称为用户数据.MicrosoftAzure 中也有一项类似的功能,我们称之为自定义数据. 自定义数据随其他配置信息(例如新的主机名.用户名.密码.证书和密钥等)一起发送到 VM.这类数据经过base64 编码后传递给 Azure API.在 Window

板邓:wordpress 自定义数据表输出实现分页功能

wordpress文章列表也实现分页很简单,网上有很多代码直接复制过来用就可以实现,但是如果是列表页输出的是我们新建的数据表内容,这个就不能实现了!需要自己开发才行. php+mysql 结合wordpress的一些方法实现! 代码如下: $page=$_GET['page'];//当前是第几页 $pagesize=10;//每页显示记录数量 $pages=($page-1)*$pagesize;//偏移量 $nums=$num/$pagesize;//总页数 if(!$_GET['page']

Linux上检查MySQL数据表的存储引擎类型三板斧

MySQl主要使用两种存储引擎:MyISAM 和 Innodb.MyISAM是非事务的,因此拥有读取更快,然而InnoDB完全支持细颗粒度的事务锁定(比如:commit/rollback).当你创建一张新的MySQL表时,你要选择它的类型(也就是存储引擎).如果没有选择,你就会使用与预设置的默认引擎. 如果你想要知道已经存在的MySQL数据表的类型,这里有几种方法达到. 方法一 如果你可以访问phpMyAdmin,你可以从phpMyAdmin找出默认的数据库类型.从phpMyAdmin中选中数据

Windows Azure上的大数据服务: HDInsight的介绍

这个视频介绍了目前非常流行的大数据处理框架Hadoop的Windows Azure上的实现:HDInsight,以及利用MapReduce来对大数据进行分析,利用Hive进行查询,利用客户端PowerBI, PowerQuery对结果进行展示等过程. 讲的通俗易懂,实乃Hadoop大数据处理最佳入门:) http://channel9.msdn.com/Series/MVA-China-2/dataservices-20140918-2-5

[UE4]自定义结构体、类、数据表

自定义数据表: #pragma once #include "CoreMinimal.h" #include "Engine/UserDefinedStruct.h" #include "Components/CanvasPanel.h" #include "Blueprint/UserWidget.h" #include "Runtime/Engine/Classes/Engine/UserDefinedStruc

在Openfire中使用自己的数据表之修改配置文件

目前我使用的Openfire版本是3.10.3,以下使用说明也是在这个版本上做的修改. Openfire提供了两种方式使用用户数据表.一种是安装完成之后默认实现的org.jivesoftware.openfire.user.DefaultUserProvider,一种是org.jivesoftware.openfire.user.JDBCUserProvider,同样对于用户验证也提供了默认实现的org.jivesoftware.openfire.auth.DefaultAuthProvider

通过本地的SQL Manage sutudio管理windows azure上的SQL Server

通过SQL Manage sutudio管理windows azure上的SQL Server 说到windows azure上的SQL创建,我们在上一篇文章上有介绍了,那今天主要介绍什么呢,我们发现在windows azure上创建的sql数据库下没有SQL Server代理选项功能.我相信大家都用过SQL Server代理相关的功能,具体功能就不用多说了.拿我来说,因为我们有个服务的数据是写入到SQL Server上的,我们在本地通过计划人物实现对数据保留60天,然后通过web方式查询,这样

SQLite学习手册(数据表和视图)

如何列出SQLite数据库中的所有表 SQLite数据库中的信息存在于一个内置表sqlite_master中,在查询器中可以用 select * from sqlite_master 来查看,如果只要列出所有表名的话,则只要一个语句: SELECT name FROM sqlite_master WHERE type='table' order by name,因为表的列type固定为'table' 一.创建数据表: 该命令的语法规则和使用方式与大多数关系型数据库基本相同,因此我们还是以示例的方

数据表和视图

一.创建数据表: 该命令的语法规则和使用方式与大多数关系型数据库基本相同,因此我们还是以示例的方式来演示SQLite中创建表的各种规则.但是对于一些SQLite特有的规则,我们会给予额外的说明.注:以下所有示例均是在sqlite自带命令行工具中完成的.    1). 最简单的数据表:    sqlite> CREATE TABLE testtable (first_col integer);    这里需要说明的是,对于自定义数据表表名,如testtable,不能以sqlite_开头,因为以该前