通知区域弹出链接区域

时间:2013-04-29 18:41:50

标签: winapi windows-7 windows-8 flyout

我使用WinAPI在通知区域中创建了一个弹出窗口,我的目标是使其类似于当您单击通知区域中的某些图标时显示的弹出窗口,如音量图标。

我已经成功地使它看起来和行为类似于其他的,但有一件事我似乎无法弄清楚。弹出窗口的链接区域具有较深的蓝色背景,Windows 7和Windows 8之间的外观存在细微差别。可以在此处看到Windows 7中的图片

http://msdn.microsoft.com/en-us/library/windows/desktop/aa511448.aspx#flyouts

我通过使用WM_PAINT消息以正确的颜色(包括该部分最顶部的渐变)手动绘制我的弹出窗口的这个链接区域来实现这一点,但我只是觉得它太多了黑客,特别是因为它不受Windows中更改主题的影响。例如,如果我设置“Windows Classic”主题,则此区域应为灰色而不是蓝色。

所以,我的问题是,如果不手动绘制窗口,我是否遗漏了如何实现这一点。我注意到Win 7中的资源管理器窗口中的详细信息窗格具有相同的外观。我已经搜索了很多答案,但我还没有找到任何答案。这是我第一次使用WinAPI进行GUI,所以我的经验很少,因此我假设有一些我不知道的事情。

更新

我确实设法弄清楚如何绘制这个区域而不用手动绘制它。可以使用OpenThemeDataDrawThemeBackground函数

绘制它
  

HTHEME aeroTheme = OpenThemeData(hWnd,L“FLYOUT”);
  DrawThemeBackground(aeroTheme,hdc,FLYOUT_LINKAREA,0,& rect,& rect);

这显然只适用于启用主题的情况,因此对于非主题的情况,我会绘制一个具有适当颜色的普通矩形。

1 个答案:

答案 0 :(得分:0)

我不是WinAPI的专家,因此如果没有手动绘画,我无法提供任何关于实现所需外观的建议。

但是,如果您成功实现了特定颜色主题的外观,我建议您查看GetSysColor function并在创建绘画画笔时使用此功能。这应该允许您根据已设置的主题获取正确的颜色。可以找到更多信息(包括样本表)here

希望这有帮助。