用C++品尝Vista美味[7]
SetWindowText()函数重画静态控件,导致调用OnDrawItem()函数。OnDrawItem()函数中的代码与前面框架窗口示例中的代码类似,这里不再赘述。
在磨砂玻璃效果上绘制图形。
如前所述,在毛玻璃区域绘图需要能够识别alpha的API,比如GDI+函数。下面的示例使用GDI+中的Image类在对话框的左上角绘制一个徽标。该徽标是从与exe文件位于同一目录的myLogo.png文件中读取的。请注意,因为是用GDI+来绘制logo,所以保留了Logo周围的透明度,看起来显示正确。
使整个窗户结霜
我们也可以让整个窗户看起来像磨砂玻璃。下面是一个简短的代码,只需将MARGINS结构的第一个成员设置为-1:
mar = {-1 };
DwmExtendFrameIntoClientArea(m _ hWnd,& mar);
如果你把这段代码添加到我们的对话程序中,请注意。四个按钮上的文本颜色显示不正确,每个按钮周围都有一个不透明的矩形。一般来说,透明不适合子窗口。如果想要一个毛玻璃效果的对话框,控件部分需要用不透明背景绘制,比如“Windows Mobility Center”程序:
结论
在程序中加入毛玻璃效果,可以让程序在视觉上看起来很不一样,提供比一般控件中的状态栏更好的状态显示区域。本文主要起到抛砖引玉的作用,也帮助你在使用本地C++添加毛玻璃效果时,对DWM API有一个初步的了解。
位律师回复
0条评论