解决Windows 程序界面闪烁问题的一些经验 (转载)

 一般的windows 复杂的界面需要使用多层窗口而且要用贴图来美化,所以不可避免在窗口移动或者改变大小的时候出现闪烁。先来谈谈闪烁产生的原因   原因一: 如果熟悉显卡原理的话,调用GDI函数向屏幕输出的时候并不是立刻就显示在屏幕 上只是写到了显存里,而显卡每隔一段时间把显存的内容输出到屏幕上,这就是刷新周期。 一般显卡的刷新周期是 1/80秒左右,具体数字可以自己设置的。 这样问题就来了,一般画图都是先画背景色,然后再把内容画上去,如果这两次操作不在同一个 刷新周期内完成,那么给人的视觉感受就是,先看到只有背景色的图像,然后看到画上内容的图像, 这样就会感觉闪烁了。

漂亮菜单的实现原理与技巧

漂亮菜单的实现原理与技巧 Elliot Liu (aisnote@gmail.com) http://aisnote.com http://bbs.aisnote.com 摘要:概述性的介绍了如何自画windows上的菜单以及相关的技巧。本文适合对象为有一定Windows编程基础的人。 1、引言 菜单是Windows标准控件之一,菜单几乎在每个应用软件中都存在。MS提供的默认菜单是比较难看的,但MS自己制作的程序比如Office等,用的菜单却很漂亮,而且一般不是默认的标准菜单(运用DrawMenuBar)。 从office97开始,用的是rebar里面嵌入一个CommandBar来模拟菜单。这个可以用spy++抓一下就知道了,这样做的好处是可以到处停靠(Dock),熟悉Windows的人都知道,停靠是标准控件Toolbar的一个普通属性,所以我们可以猜测到CommandBar应该就是一个toolbar。当然从WTL的源码里也可以找到。 如何字画菜单的文章网上有很多: http://www.vckbase.com/document/listdoc.asp?mclsid=3&sclsid=303 这个URL都是关于如何自画菜单的,但对于初学者来说或者不熟悉Windows的人来说,还是有一定的难度的。但大致都分为如下二个步骤: l 处理WM_DRAWITEM 消息:判断是不是来自菜单,然后根据一个item,一特item的信息进行绘制,前提是你得了解一些GDI的基本绘制函数。这个过程是比较简单的。 l 为了处理菜单的边框,需要安装一个HOOK,去抓菜单的窗口,MSDN提供的菜单的Class Name是“#32768”。这个过程需要一定的Windows编程基础,以及HOOK的使用方式。有点经验的人只需看看MSDN,或者GOOGLE个例子来,就行了,上面的URL也有类似的文章。...