用C++品尝Vista美味[7],第1张

用C++品尝Vista美味[7],第2张

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有一个初步的了解。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » 用C++品尝Vista美味[7]

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情