2012年7月16日星期一

学习笔记:windows下qt4程序实现Aero效果及动态切换


(这篇文章原发表于CSDN,CSDN密码泄露事件后就删除了,现重发于这里,略有修改。)

    一直很喜欢windows 7的Aero效果,很想在自己的程序中用上。但Aero效果是由windows的DWM (Desktop Window Manager)提供的,qt并没有提供调用的方式,自己也不懂windows的编程。好在CuteQt上提供了用qt封装好的版本,可以供我尝试。原帖见<<qt如何在vista和windows7下实现Aero效果>>

    下载了它的源码编译,运行后发现有几个问题:

    1、win7下将目标程序设置为xp兼容模式,运行时依然开启了aero。即没有检测系统版本。

    2、win7未开启aero效果,运行目标程序,再开启aero效果。此时程序不能动态切换显示效果。

    3、窗体若启用了aero效果,WindowNotifier会记录它的指针。将窗体delete后,WindowNotifier依然保留其指针。此时若发生系统aero效果切换事件(如由一个支持aero效果的主题换到一个不支持aero效果的主题),程序将会崩溃。这是因为使用了野指针。

     因此我修改了qtwin.h和qtwin.cpp,修正了上面的几个问题。由于QtWin::enableAeroWindow(QWidget*widget,bool enable =true)这个函数一调用就程序崩溃,自己不懂windows编程也无法修改,于是将其注释掉,并添加了两个新的函数staticboolQtWin::enableAeroEffect(QWidget*widget)和staticvoidQtWin::disableAeroEffect(QWidget*widget)。使用时只需包含qtwin.h头文件,无须判断是否windows系统了。

    具体代码请看Ez拼图源码中的qtwin.h和qtwin.cpp:点击下载



文档信息



没有评论:

发表评论