如何在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(以及其他方式)。 指定MENUITEMINFOhbmpItem 字段。在 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 bitmapHBITMAP bitmap;// Load the bitmap resourcebitmap = (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中将图标添加到菜单项[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在win32 api中将鼠标坐标写入文本文件?

如何在 Visual C++ 2008 中将 MFC 应用程序项目添加到 Win32 应用程序项目

如何在 win32 API 中向 Skins 添加控件

win32api:在文本行中合并位图

c语言 win32api 创建一个按钮,点击按钮后,按钮消失?

C头文件如何导入win32api函数?