通知区域弹出链接区域

4
我使用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);

当启用主题时,此代码可以正常工作,对于未启用主题的情况,需要使用适当颜色绘制普通矩形。

1个回答

0

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

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

希望这有所帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接