有过Win32、MFC编程经验的朋友应该都知道,传统Windows应用中的按钮、编辑框等控件都是一个子窗口,操作系统通过窗口句柄来唯一标识该窗口。 使用Windows 标准控件创建用户界面,美化起来是相当困难的,例如我们需要使用一张位图作为按钮的背景,MFC应用需要以下几个步骤:

  • 1.继承CButton类。
  • 2.为按钮添加BS_OWNERDRAW样式。
  • 3.重写DrawItem函数,在该函数中调用绘图API进行按钮的绘制。

要对每一个控件都进行自绘工作量是相当大的,使用DirectUI结合目前市场上的界面库进行界面设计就简单多了。

DirectUI是相对于传统控件而言的一种新的界面设计技术,笔者看来DirectUI只是一种界面设计理念,即我们的按钮、编辑框等不再以窗口句柄的形式创建,而是在主窗口客户区的一个逻辑区域。

例如通过DirectUI思想创建的按钮,其实只是在主窗口中绘制的一张图片,当用户点击图片在该窗口中的区域时,我们就认为是该"按钮"的点击事件,为了使得按钮更加逼真,我们还可以在点击时绘制另一张按下状态的按钮图片。

目前基于DirectUI设计思想实现的界面库也是比较多的,而且很多都是免费或者开源的,下面介绍笔者比较喜欢的两款:

1.免费界面库SkinUI

官方网站:http://www.skinui.cn/index.htm

特点:逻辑与界面分离:支持xml文件进行窗口布局,更改界面布局文件,不影响程序功能,甚至不需重新编译。

炫彩换肤:SkinUI界面库具备一键换肤的功能,除了提供一套默认皮肤外,还可以自由配置多套系统皮肤。

官方Demo:

上面是使用SkinUI构建的360安全卫士和360压缩界面,效果还不错吧!

2.开源界面库Duilib

Duilib是一款基于DirectUI思想实现的一款开源界面库,支持xml界面布局,界面设计与业务逻辑分离,具有强大的事件处理机制。而且提供了一款所见即所得的界面编辑器UIDesigner。

这套界面源码最初托管在Google Code上。

项目地址:http://code.google.com/p/duilib/,基于众所周知的原因,目前最新的源码已经迁移到Github。

Github地址:https://github.com/duilib/duilib

下面我们来看看官方提供的Demo:

效果也还不错吧,开源的东西一向比较受到笔者的青睐,Duilib也是笔者想详细介绍的一款界面库,从下节开始我们一起学习这套界面库的使用方法。

DirectUI界面编程(零)简介的更多相关文章

  1. DirectUI界面编程(一)创建第一个应用

    1.获取Duilib库文件 通过上一节大家对DirectUI界面设计有了初步的了解,本节开始我们一起学习Duilib界面库的使用. 首先我们需要获取Duilib库,目前最新版本为2.0,最新版本源码托 ...

  2. DirectUI界面编程(六)实现右键弹出菜单

    本节向大家介绍一下右键弹出菜单是如何实现的.效果如下,在窗口中点击鼠标右键弹出菜单,点击菜单项能够响应菜单点击事件. 使用Duilib库实现的弹出菜单,实际上也是一个Windows窗口,因此我们需要创 ...

  3. DirectUI界面编程(五)WindowImplBase的使用

    上节笔者向大家介绍了Duilib的界面布局并在最后编写了一个仿QQ旋风的界面,但是由于我们屏蔽了系统的标题栏,读者可能已经发现,我们的窗口没办法移动,同样也不能通过拖动来改变窗口的大小. 这就需要我们 ...

  4. DirectUI界面编程(四)界面布局详解

    Duilib的界面布局使用xml文件进行描述,在Duilib v1.1版本的xml布局文件中我们可以使用以下这些标签(后续版本标签有扩充): 这些标签总的来讲可以分为三类: 窗口类,该类别中只有一个W ...

  5. DirectUI界面编程(三)从XML文件中加载界面

    Duilib支持xml界面布局,使得界面设计与逻辑处理相分离,本节介绍如何从xml文件中加载界面元素. 我们需要以下几个步骤: 创建并初始化CPaintManagerUI对象. 创建CDialogBu ...

  6. DirectUI界面编程(二)绘制一个按钮

    上节介绍了使用源码方式构建Duilib应用的项目配置,并创建了一个最简单的基于Duilib库的窗口,细心的读者会发现,当我们点击窗口的关闭按钮时,应用并没有真的退出,因为我们并没有对窗口事件进行处理, ...

  7. 开源的DirectUI界面库

    1. duilib简介 duilib是一个开源的DirectUI界面库,简洁但是功能强大.而且还是BSD的license,所以即便是在商业上,大家也可以安心使用.现在大家可以从这个网站获取到他们所有的 ...

  8. 为什么qt成为c++界面编程的第一选择

    为什么qt成为c++界面编程的第一选择 一.前言 为什么现在QT越来越成为界面编程的第一选择,笔者从事qt界面编程已经有接近8年,在这之前我做C++界面都是基于MFC,也做过5年左右.当时为什么会从M ...

  9. 为什么 qt 成为 c++ 界面编程的第一选择?

    为什么qt成为c++界面编程的第一选择 一.前言 为什么现在QT越来越成为界面编程的第一选择,笔者从事qt界面编程已经有接近8年,在这之前我做C++界面都是基于MFC,也做过5年左右.当时为什么会从M ...

随机推荐

  1. 深度学习:又一次推动AI梦想(Marr理论、语义鸿沟、视觉神经网络、神经形态学)

    几乎每一次神经网络的再流行,都会出现:推进人工智能的梦想之说. 前言: Marr视觉分层理论 Marr视觉分层理论(百度百科):理论框架主要由视觉所建立.保持.并予以解释的三级表象结构组成,这就是: ...

  2. css3 y轴翻转效果

    这个小例子是hover的时候可一看到div沿着y轴转动一圈 思路:css写好动画transiton: all 1s; hover的时候给他一个状态transform:rotateY(180deg); ...

  3. (转)基于MVC4+EasyUI的Web开发框架经验总结(8)--实现Office文档的预览

    http://www.cnblogs.com/wuhuacong/p/3871991.html 基于MVC4+EasyUI的Web开发框架经验总结(8)--实现Office文档的预览 在博客园很多文章 ...

  4. SpringMVC(三)@PathVariable

    使用@PathVariable可以快速的访问,URL中的部分内容. ①. 在@RequestMapping的value中使用URI template({变量名}),然后在@RequestMapping ...

  5. word2016如何英汉互译

    1.如果是一篇英文文档且是pdf格式,可以用word2016打开直接转化成了word,就算不是会员也可以的,在此附上16版的光盘安装包,可以百度自行下载 (链接:https://pan.baidu.c ...

  6. hibernate简单集合映射和获取

    简单集合映射(可以直接获取) // javabean设计 public class User { private int userId; private String userName; // 一个用 ...

  7. 洛谷P3195 [HNOI2008]玩具装箱TOY 斜率优化

    Code: #include<cstdio> #include<algorithm> using namespace std; const int maxn = 100000 ...

  8. Day 12 闭包函数,装饰器

    闭包函数 回顾: 1.函数对象:可以将定义在函数内的函数返回到全局使用.从而打破了函数层级限制 2.名称空间与作用域:作用域关系在函数定义阶段时就已经固定死了,与调用位置无关,即在任意位置调用函数都需 ...

  9. 解决value toDF is not a member of org.apache.spark.rdd.RDD (spark2.1 )

    解决上述办法有两点: 1.两个import 需要放在 hiveCtx之后. val hiveCtx: SparkSession = SparkSession.builder.config(conf). ...

  10. 数据结构(3) 第三天 栈的应用:就近匹配/中缀表达式转后缀表达式 、树/二叉树的概念、二叉树的递归与非递归遍历(DLR LDR LRD)、递归求叶子节点数目/二叉树高度/二叉树拷贝和释放

    01 上节课回顾 受限的线性表 栈和队列的链式存储其实就是链表 但是不能任意操作 所以叫受限的线性表 02 栈的应用_就近匹配 案例1就近匹配: #include <stdio.h> in ...