2013-04-29 223 views
4

我在通知区域中使用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,所以我没有什么经验,因此我假设有一些我不知道的东西。

UPDATE:

我还是设法弄清楚如何无需手动画吧得出这样的区域。它可以通过使用OpenThemeDataDrawThemeBackground功能

绘制

HTHEME aeroTheme = OpenThemeData(HWND,L “弹出”);
DrawThemeBackground(aeroTheme,hdc,FLYOUT_LINKAREA,0,& rect,& rect);

这显然只适用于启用主题的情况,所以对于非主题的情况,我使用适当的颜色绘制正常的矩形。

回答

0

我不是WinAPI方面的专家,所以我无法提供任何关于在没有手动绘画的情况下实现想要的外观的建议。

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

希望这会有所帮助。

+0

谢谢,我会研究它。 – AFA 2013-04-30 11:09:21