我使用WinAPI在通知区域创建了一个弹出窗口,我的目标是使其类似于当您单击通知区域中某些图标(如音量图标)时出现的弹出窗口。我已经成功地让它看起来和行为与其他窗口类似,但有一件事我似乎无法解决。弹出窗口的链接区域具有较暗的蓝色背景,并且在Windows 7和Windows 8之间的外观上存在微妙的差异。可以在此处查看Windows 7中的图片。
http://msdn.microsoft.com/en-us/library/windows/desktop/aa511448.aspx#flyouts
我通过手动绘制我的 flyout 窗口链接区域的正确颜色(包括部分顶部的渐变)使用 WM_PAINT 消息来实现这一点,但我觉得这太过于 hack,特别是它不受 Windows 主题更改的影响。例如,如果我设置“Windows 经典”主题,则此区域应为灰色而非蓝色。所以,我的问题是,我是否错过了某些东西,可以在不手动绘制窗口的情况下实现这一点。我注意到 Win 7 中资源管理器窗口中的详细信息窗格具有相同的外观。我已经搜索了很多答案,但还没有找到任何东西。这是我第一次使用 WinAPI 进行 GUI,因此我几乎没有经验,因此我假设有些事情我不知道。
更新:
我确实设法在不手动绘制的情况下绘制此区域。可以使用 OpenThemeData 和 DrawThemeBackground 函数进行绘制。
HTHEME aeroTheme = OpenThemeData(hWnd, L"FLYOUT");
DrawThemeBackground(aeroTheme, hdc, FLYOUT_LINKAREA, 0, &rect, &rect);
当启用主题时,此代码可以正常工作,对于未启用主题的情况,需要使用适当颜色绘制普通矩形。