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,所以我的经验很少,因此我假设有一些我不知道的东西。

更新:

我确实设法弄清楚如何在不手动绘制的情况下绘制这个区域。可以使用OpenThemeDataDrawThemeBackground函数绘制

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

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

4

1 回答 1

0

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

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

希望这可以帮助。

于 2013-04-30T10:19:10.640 回答