我使用 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,所以我的经验很少,因此我假设有一些我不知道的东西。
更新:
我确实设法弄清楚如何在不手动绘制的情况下绘制这个区域。可以使用OpenThemeData
和DrawThemeBackground
函数绘制
HTHEME aeroTheme = OpenThemeData(hWnd, L"FLYOUT");
DrawThemeBackground(aeroTheme, hdc, FLYOUT_LINKAREA, 0, &rect, &rect);
这显然仅在启用主题时才有效,因此对于非主题情况,我会绘制一个具有适当颜色的普通矩形。