| 创建非矩形窗口的简单方法 赵湘宁 |
| 本文范例程序 提出问题: 为了创建不同形状窗口的应用程序,象MP3播放器,我设置对话框的背景为 “TRANSPARENT”(透明)(使用SetBkMode)并在WM_CTLCOLORDLG消息处理器中创建一支“空笔”(NULL)来绘制对话框背景。然后我用TransparenBlt将自己的位图(bitmap)放到对话框上。开始显示对话框时透明,但关闭这个对话框下层的其它窗口时,重画后显示的是前一个窗口部分,而不是下层的窗口的图形。那么如何才能做到真正的透明? SetBkMode这个函数在绘制窗口时确实使背景透明,但Windows假设每一个窗口必须是矩形的。如果你改变窗口大小,或关闭或移动后面的窗口,Windows是不会重画你窗口下面的像素的,因为它已经假设你的窗口将它们置灰了。换句话说,每一个窗口负责完整地绘制自身,包括背景。(事实上,Windows在擦除窗口背景时恰好发送WM_ERASEBKGND消息) |