如何在c ++ win32 API中将图标添加到菜单项[重复]
Posted
技术标签:
【中文标题】如何在c ++ win32 API中将图标添加到菜单项[重复]【英文标题】:How to add icons to menu items in c++ win32 API [duplicate] 【发布时间】:2012-09-30 18:11:31 【问题描述】:可能重复:InsertMenu/AppendMenu - How to add Icons to menu and submenus using C++ and win32
你好,我有一个 c++ 菜单,这里是它的代码
HMENU hMenu = CreateMenu();
HMENU hFileMenu = CreatePopupMenu;
HMENU HFileOpen = CreateMenu;
AppendMenu(hFileMenu, MF_STRING, (UINT)hFileOpen, "Open");
AppendMenu(hMenu, MF_STRING | MF_POPUP, (UINT)hFileMenu, "File");
SetMenu(hwnd,hMenu);
我一直在寻找整个互联网,但找不到有关如何为菜单项制作位图的教程。 我想为 hFileOpen 添加一个位图。 我该怎么做?
【问题讨论】:
除非 MS 添加了该功能,而我完全错过了它,菜单项上的图标是/完全是所有者绘制的。 IE。您必须自己绘制菜单项。自从我这样做以来已经有一段时间了,所以可能已经改变了。 你可以使用函数而不是资源。只需从CreateMenu
开始,然后使用AppendMenu
添加即可。
看看那个。他们确实添加了它。已经很久了。 SetMenuItemBitmaps ftw(以及其他方式)。
指定MENUITEMINFO
的hbmpItem
字段。在 Vista 及更高版本上,您可以使用 PARGB32 位图来获得 alpha 混合字形。
InsertMenu/AppendMenu - How to add Icons to menu and submenus using C++ and win32 或 C++: Step 1: ExtractIconEx. Step 2: ??? Step 3: SetMenuItemBitmaps 的可能副本
【参考方案1】:
SetMenuItemInfo http://msdn.microsoft.com/en-us/library/windows/desktop/ms648001(v=vs.85).aspx
【讨论】:
我不确定如何使用该功能,也许您可以帮助我 @ArtursLapins 请参阅 MSDN 文档:msdn.microsoft.com/en-us/library/windows/desktop/…【参考方案2】:首先你应该从资源中加载位图。您可以使用LoadImage 或LoadBitmap Win32 API 函数来加载位图。
它将返回一个新的图像句柄。 然后您可以使用此句柄通过SetMenuItemInfo 函数将位图分配给菜单项。
另请参阅有关 using bitmaps with menus 的 MSDN 主题,该主题逐步进行了描述。
【讨论】:
你能帮我吗,我不知道如何使用它微软没有解释好。 这个函数看起来像这样:// create a bitmap
HBITMAP bitmap;
// Load the bitmap resource
bitmap = (HBITMAP)LoadImage( HINSTANCE, "file.type", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
然后创建一个 MENUITEMINFO 并通过指向 SetMenuItemInfo 函数的指针发送它。
对不起,我有点困惑,HINSTANCE、IMAGE_BITMAP、0,0 和 LR_LOADFROMFILE 假设保持不变,否则我必须更改它们,如果我做哪一个和做什么
hinstance 必须更改为您的 HINSTANCE 是什么。您从 winmain 获得该值。其他值保持不变。 IMAGE_BITMAP 用于指定这是一个位图文件。两个 0 表示我们将使用实际图像大小来加载图像。并且 LR_LOADFROMFILE 告诉 Windows 实际从磁盘上的文件加载此资源。
好吧,这就是我所拥有的:'HBITMAP 位图;' '位图 = (HBITMAP)LoadImage(hInstance, "menuicons/fileopen.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);'现在我如何告诉我的 AppendMenu 添加该位图?以上是关于如何在c ++ win32 API中将图标添加到菜单项[重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Visual C++ 2008 中将 MFC 应用程序项目添加到 Win32 应用程序项目