一.介绍

DirectUI技术说白了就是XML配置文件+图片+JavaScript控制界面。这点与网页css+图片+JavaScript十分相似,就是如开发网页一般开发桌面程序界面,这个开发效率当然大大的提高。将程序员从繁琐的界面绘制工作中解脱出来,专心开发逻辑代码。还能大大减少代码量,因为据统计,传统MFC程序中,界面代码大约占总代码的1/3强!也就是说,这个1/3的代码都可以由xml+javascript替代!

同理,如果网页开发时,每个图片都需要由web程序绘制,你能想象一个网页的代码量有多少吗?

简直不能想象,而传统Window程序就是如此!

DirectUI技术最早被用于window xp资源管理器左边栏,被称为task folder.而DirectUI被广为国人所知,还得感谢腾讯公司。QQ2009的界面就是使用DirectUI技术开发的。类似的有微软的MSN,OCS和百度Hi。最近的Office2007 Ribbon界面,如果使用Spy++查看,可以见到一个名为"NetUI"的窗口,其实这也是微软内部DirectUI的一个变种。不过无论是微软,腾讯,还是百度,都使用了DirectUI技术来开发自己的软件界面,却不肯将其公开。本文将介绍如何使用DirectUI技术开发一个类似QQ的界面演示程序。

二.背景

与DirectUI最相似的要数微软最近推出的WPF,其设计思想是相同的。只不过WPF只能运行于托管环境下。window下的C++程序员一直呼吁微软推出native WPF,也就是非托管的WPF。不过微软给出的答案是:NO。所以WPF将定位于为.NET战略服务。使用WPF开发的界面程序,必须带上庞大的.NET运行环境。不过随着Window 7的普及,这个状况会有所改变(window 7继承了.NET环境)。

不过,我想,如果许多公司的产品都是需要支持Window XP(最少QQ现在还是支持Window 2000),所以WPF不是桌面应用程序界面开发的首选。

三.实现

废话不多说,先看演示程序的图片,足够以假乱真吧?!

在xml文件中也引入了网页中样式(style)的概念,style控制着网页中一个元素的外观。同理,directui xml文件中的样式(style)控制着一个控件的外观。同样的一个button,使用了不同的style,外观也不一样。如下面的代码及图片所示。

参照网页开发中的JavaScript,DirectUI JavaScript可以控制控件的状态、文本、显示/隐藏、位置等等属性。DirectUI JavaScript是基于事件,比如在button1点击事件中,改变button2的文本。或者button1点击事件之后,button1就要禁用。像这样的需求,在界面开发中是比较常见的。

在c++代码中,剩余的只是界面与程序逻辑的借口。比如,QQ2009中从服务器接收添加用户的通知,然后操作界面将此用户显示出来。如此看来,c++代码中完全没有了绘制界面的代码。

四.后话

DirectUI是个好技术,只是微软不愿将其公开,其中最大的原因是与它的.NET战略冲突。而由DirectUI技术演变而来的WPF只适用于托管环境。不过,还是有几个公司或者个人开发了自己的DirectUI界面库。我知道的,有:

DirectUI.com // 公司开发的。居然连正式版和试用版一样!?

Bodsoft DirectUI // 公司开发的。有试用版。发现一个上市公司成功案例,www.94kuai.com 网宿科技

UIEasy DirectUI // 个人开发的,比较简单。没设计工具。

使用DirectUI技术实现QQ界面相关推荐

  1. 【转】使用DirectUI技术实现QQ界面

    一.介绍 DirectUI技术说白了就是XML配置文件+图片+JavaScript控制界面.这点与网页css+图片+JavaScript十分相似,就是如开发网页一般开发桌面程序界面,这个开发效率当然大 ...

  2. QQ界面技术(DirectUI)

    DirectUI界面库 取名自微软的一个窗口类名"DirectUIHWND",意为Paint on parent dc directly.即子窗口不以窗口句柄的形式创建,只是逻辑上 ...

  3. DirectUI与QQ界面

    原文地址::http://blog.csdn.net/querw/article/details/6048524 前言 今天心血来潮想跟踪一下界面编程, 发现DirectUI现在挺火的. 用逻辑窗口代 ...

  4. DirectUI 与 QQ界面

    DirectUI 与 QQ界面 前言 今天心血来潮想跟踪一下界面编程, 发现DirectUI现在挺火的. 用逻辑窗口代替实际窗口的想法真是非常棒,只是要自绘实现所有的标准控件工程太大了,况且还有想ED ...

  5. DirectUI技术与无句柄窗口应用

    原文地址::http://fpcfjf.blog.163.com/blog/static/554697932010513101057323/ DirectUI技术与无句柄窗口应用 这两天在网上闲逛,发 ...

  6. 仿qq左滑删除listview_Java基于Swing和Netty仿QQ界面聊天小项目

    点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:硬刚一周,3W字总结,一年的经验告诉你如何准备校招! 个人原创100W+访问量博客:点击前往,查看更多 来源:b ...

  7. MFC 列表控件CListCtrl加载类似QQ界面的头像与文字

    本文主要讲述使用VS2012 MFC的CListCtrl(列表)控件加载类似于QQ界面的图片与文字数据.主要通过CListCtrl::InsertColumn.InsertItem.SetItemTe ...

  8. Vue3+ElementPlus网页端聊天|vue3.0仿微信/QQ界面实例

    vue3-webchat 基于vue3.0.5开发的仿微信|QQ界面桌面端聊天实例. 运用vue3.x全家桶技术+element-plus+v3layer+v3scroll搭建的仿微信/QQ界面网页聊 ...

  9. Swing制作高仿QQ界面包含主界面、聊天窗口、系统设置窗口|圆角界面|透明|颜色|渲染|换肤

    最近几天闲着没事,练习了一下.编写了一个模仿QQ的界面,主要是练习Swing.呵呵,基本上使用到了我博客前面讲的各种技术,在这里跟大家分享了.我们先来看看主界面:       左边的界面是用Swing ...

最新文章

  1. Nacos实现原理详解
  2. win10搭建python环境_win10系统搭建python环境的还原方法
  3. shell脚本——expect命令
  4. 【TCP/IP 协议】 TCP/IP 基础
  5. php fpm error,关于启动php-fpm失败的解决办法
  6. windows查看usb信息命令_【VPS】Linux VPS查看系统信息命令大全
  7. Linux服务部署之NTP时间服务器
  8. 测试工具的选择和使用
  9. 给IT新人的15个建议:程序员的辛酸反省与总结!
  10. Matlab--m代码转C与C++代码)2(详尽示例与描述)
  11. NumPy 秘籍中文第二版·翻译完成
  12. cocoapods 安装失败 ERROR: Error installing cocoapods: ERROR: Failed to build gem native extension.
  13. bzoj 2655: calc [容斥原理 伯努利数]
  14. JS判断手机浏览器是横屏or竖屏
  15. 配置vivado用vscode编辑文本
  16. 关于2020年全国大学生数学建模竞赛——我的感想
  17. 统计学基础(四)—卡方检验怎么用?
  18. 海尔希望小学:同一片蓝天下梦想启航
  19. flash游戏开发02_引入flixel框架的helloworld
  20. 青龙-稳定脚本记录(更新中)

热门文章

  1. 基于区块链的医疗数据共享系统
  2. SSL是什么?其含义和机制最易理解的解说!
  3. 2022-2028年全球与中国汽车美容行业产销需求与投资预测分析
  4. 九毛九,患了太二依赖症
  5. 动态规划——最少硬币找零问题(python)
  6. 小米手机碎屏后米四启动屏幕虚拟键,禁用实体键
  7. 大专学计算机专业,大专计算机专业是学什么内容
  8. qt 程序数据库管理器不匹配
  9. ios——如何完成截屏操作并将截屏结果保存到设备本地相册
  10. 《高效能团队模式》读书笔记1