获取上下文菜单的图标区域的宽度

时间:2011-04-29 09:56:56

标签: winapi popup

我需要使用Windows API(> = Windows XP,如果这很重要)获取上下文菜单的图标区域的宽度。我在this question, there is an image中可以看到的图标区域是什么意思。它是为菜单左侧的图标保留的空间。

我浏览了您可以通过SystemParametersInfoGetSystemMetrics获得的大量信息,但一无所获。但是必须有一些默认值,对吧?我怎么能得到它?

1 个答案:

答案 0 :(得分:2)

本机win32菜单并不真正支持图标,因此您无法将其称为图标区域。在基本菜单中,该区域的大小为SM_CXMENUCHECK宽(可能还有SM_CXEDGE用于填充)对于Vista +,您可以使用MENU_POPUP *常量和GetThemeInt找到一些better metrics。 AFAIK没有记录复制经典Win95 +菜单所需的确切布局和边界常量。

由于您正在谈论图标,我假设您要在菜单中添加图标,因此宽度应该是max(yourIconWidth,GetSystemMetrics(SM_CXMENUCHECK))+ padding。 This old MSJ article可能是最好的菜单所有者绘制教程,而codeproject有自己的menu article section,有几个不同的所有者绘制实现。 (MS Office和Visual Studio也使用自定义内容)

最后要注意的是,既然你说XP +你应该能够使用HBMMENU_CALLBACK并且只担心图标而不是菜单图纸的其余部分......