基于KWinUI的换肤框架KSkinX的简单Demo

Posted 2 CommentsPosted in KWinUI

KWinUI虽然很简洁,但仍然可以做不少事情。曾经有段时间,基于KWinUI写了一个换肤框架叫做KSkinX,现在就放出KSkinX的一个简单Demo。因为KSkinX还比较粗糙,比如滚动条的换肤尚未实现、标题栏按钮的处理还有待改进、实现的窗口组件还太少等原因,所以暂时还不开放源代码。 下面是这个换肤Demo的snapshots: Demo程序从此下载。

KWinUI Sample:圆形滑动条(round slider)

Posted 1 CommentPosted in KWinUI

这是早先发表于cppblog.com的一篇文章,现在稍作整理,迁移到此处。原文在此。 此sample主要是展示一个圆形的滑动条(Slider)组件,可以做播放器的音量按钮等此类的东西,还算比较酷。使用到的KRoundSlider类已经包含在KWinUI源代码中。

KWinUI sample:工作线程(work thread)中的UI窗口

Posted 1 CommentPosted in KWinUI

在一个多线程应用程序中,进程创建的第一个线程我们称之为主线程(main thread),而从主线程中通过系统调用派生的其他线程称之为工作线程(work thread)。虽然习惯上这么称呼,而在实际上这两种线程并没有本质的差别,他们的能力是完全一样的,唯一的区别就在于派生的先后顺序而已。

关于KWinUI的一些说明

Posted 3 CommentsPosted in KWinUI

在KWinUI发布的文章中有些事情没有说清楚,现在补充一下。 首先是KWinUI的开发和测试环境。在开发KWinUI的最初是用的Visual C++ 2005 Express和windows platform sdk,sdk的版本记不清楚了。对于开发工具,我是有新的不用旧的。后来换到了Visual C++ 2008 Express,sdk更新到了windows sdk 6.0。为什么要用Express版本,自然是因为它是免费的,而且相当的好用,运行速度飞快。VC的编辑器我是不用的,我还是习惯用vim,所以其实主要用到的还是它的Debugger,编译、链接的话用命令行也是一样的方便。KWinUI还特别考虑到了C++ Builder系列的兼容性,因为我早年用过一段时间C++ Builder,相当不错的工具。不过我只在Turbo C++ Explore下面做过测试,除了它生成的程序体积比VC大一些以外,其他都还正常。甚至KWinUI可以与VCL混合编程,我试过。所以使用VC 2005/2008 Express加上最新的windows sdk或者Turbo C++ Explore以上版本的C++ Builder,来使用KWinUI应该都是没有问题的。 其次是关于界面设计。KWinUI是没有可视化界面设计器的,不过对于Dialog Based应用来说,这也不是很大的问题,我习惯用ResEdit来设计界面,也是很方便的,ResEdit是一个很不错的资源编辑器,现在完全支持UNICODE,使用很简单。后面会放出几个这样的samples。后面的samples会尽量带上截图,可以更直观的看到用KWinUI做出来的程序长啥样子:),其实不过就是标准的windows程序界面。KWinUI的程序支持系统的视觉样式也是很简单的,增加个manifest资源就可以了,关于这个网上介绍的不少。我也基于KWinUI做了一个支持程序换肤的库,不过还不太成熟,有机会可以展示一下。

轻量级开源C++ GUI开发框架KWinUI发布

Posted 3 CommentsPosted in KWinUI

windows平台上的GUI框架已经有很多了,为什么还会有KWinUI? 答案就是轻量,高效,线程安全,并且可以完全掌控。 比较各种GUI Framework的优劣是没有太多意义的,存在的东西都有它存在的合理性和适用的范围。从来没有能满足所有需求的东西,C++亦如是,虽然它是如此的强大。KWinUI来源自开发实践,是做一个项目过程中产生的。对于一个界面并不算复杂的小项目来说,那些重量级的framework太过沉重了,而每次用SDK来写界面,显然又过于繁琐了,所以有了KWinUI。KWinUI使用C++来包装windows SDK,并没有使用太复杂的技术,太复杂的我也不会:),主要使用了thunk技术和C++模板的静多态特性,并且仔细考虑了线程安全,毕竟在这个多核的时代,如果不是线程安全的就显得不那么in。 跨平台不是KWinUI的诉求,现在不是、将来也不是,现在就有很多十分优秀的跨平台GUI开发框架,比如VCF,wxWidget,gtk+,QT等。KWinUI更像是一个自娱自乐的产物,只是觉得它可能对其他一些人也有用处,所有采用lgpl协议将它公布于众,如果能对其他人有些微的帮助,那么开放它的目的就达到了。采用lgpl的好处就是你可以放心的使用KWinUI,就是在商业程序中使用也没有问题。但是如果你对KWinUI做了更好的修改,最好公布一下修改的代码,以便给其他人以帮助。就算KWinUI真的没啥价值,这样发布应该也不会对别人造成什么伤害,权当娱乐一回吧,呵呵。 KWinUI的主要特性如下: 轻量、高效、资源占用少、线程安全、使用简单,差不多就这些了。 KWinUI因为使用了模板技术,所以就是一堆头文件和几个cpp文件,使用起来相当简单,后面我会继续发几个简单的sample来演示如何使用KWinUI。 如果非要有一个版本号的话,那么就定为 0.1.0吧,因为KWinUI实在是挺稚嫩的。 如果有人对KWinUI有兴趣,欢迎对它进行进一步的修改。 KWinUI的全部源程序从此下载,很小的,我保证你瞬间就能下载下来:)

GUI之窗口过程thunk

Posted Leave a commentPosted in KWinUI

thunk是什么?查字典只能让人一头雾水。thunk是一段插入程序中实现特定功能的二进制代码,这个定义是我下的,对不对各位看官请自己斟酌,呵呵。 我这里要讲的是窗口回调专用thunk,thunk的核心是调用栈动态修改技术。地球人都知道,windows的窗口回调函数是一个全局函数,类成员函数 是不可以作为窗口回调函数的,因为它有this指针,这给我们用C++来包装窗口带来不小的麻烦。你说什么?用一个全局函数或类的静态成员函数来做窗口回 调函数?这肯定没问题。但是这样带来的麻烦也许比你想象的要多,想想我们的GUI Framework不会只有一个类,而是一个类层级结构,会有许许多许多、形形色色的widget,每个都是一个窗口。对象与窗口之间的映射可能就是个不 小的问题,像MFC那样搞?太落伍了吧!用thunk就要简单的多。WTL用了thunk,但是不够彻底。 废话少说,先贴出thunk核心代码。