我的任务目标很简单——将图标添加到通过调用 TrackPopupMenu API 显示的上下文菜单中。但显然,为 Windows 编码就像用勺子划桨一样,除了制作所有者绘制的菜单之外,没有简单的方法可以添加图标。所以我做了一些搜索,找到了一堆关于所有者绘制菜单的 C++ 代码,但到目前为止我找不到任何对我有用的东西。原因很简单——它绘制的菜单看起来像是从 Windows 95 中出来的……那么有什么方法可以制作具有默认 Windows 7 外观的自绘菜单吗?
PS。如果有一种更简单的方法可以向菜单项添加图标,例如 LoadIcon 然后 ChangeMenuItem 来设置它,如果有人能告诉我如何设置它,我将不胜感激,因为我很乐意使用它......
PS2。好吧,我喜欢的时间太长了。为什么我似乎不能在这个操作系统中做最简单的任务:(我做了一个小测试项目来说明这个问题。我用自己的 CreatePARGBBitmapFromIcon 方法加载位图,该方法将图标转换为 PARGB 位图(如下所示)然后在两个地方显示它:CStatic 控件(屏幕中间,看起来不错)和菜单项(完全是这样)。这是 Windows 7 和 XP 的屏幕截图(两者看起来完全不同):
所以,伙计们,说真的,我在这里错过了什么????
PS3。感谢@DavidHeffernan,我能够修复它。这是有效的 C++/MFC 解决方案,这是该解决方案所基于的文章,下面是几个屏幕截图:
仅供参考,我花了大约 2 天的时间来解决这个问题——在 OS X 或 iOS 上大约需要 2 分钟......
最后,我完全赞同源文章中我最喜欢的几句话:
如果只有简单一致的 API 用于制作菜单项图标,所有这些技巧和食谱都将毫无价值。不幸的是,菜单图标,一直存在于 Windows 和 Microsoft 应用程序中的东西,从来没有任何像样的 API,而且使这些图标工作的方法在每个主要的 Windows 版本中都发生了变化,这使得我们开发人员浪费我们的时间将我们的应用程序“移植”到新的“闪亮的“Windows,而不是做一些富有成效的事情。
这很好地总结了它:
啊啊啊啊啊啊啊啊啊啊啊啊啊啊!为什么微软被白痴填满???