visual InsertMenu/AppendMenu - 如何使用C++和win32将图标添加到菜单和子菜单
visual InsertMenu/AppendMenu - How to add Icons to menu and submenus using C++ and win32
我使用 C++ 和 win32 编程编写了一个 shell 扩展 dll 上下文菜单程序。开发环境是Visual Studio 2008和2010。在下面的示例代码中,我尝试仅为主菜单添加菜单图标。主菜单的菜单图标未显示。(我需要为所有菜单项添加图标。
请更正以下代码。
QueryContextMenu(HMENU hmenu, UINT /*uInd*/, UINT idCmdFirst, UINT /*idCmdLast*/, UINT /*uFlags*/ )
{
int id = 1;
HBITMAP hBitmap = NULL;
hBitmap = (HBITMAP)LoadImage((HMODULE)_AtlBaseModule.m_hInst,MAKEINTRESOURCE(IDB_MYBITMAP), IMAGE_BITMAP, 12, 12, 0);
HMENU submenu = CreatePopupMenu();
AppendMenu(submenu, MF_STRING|MF_ENABLED, uidCmdFirst + id++, L"XP");
AppendMenu(submenu, MF_STRING|MF_ENABLED,uidCmdFirst + id++, L"VISTA");
AppendMenu(submenu, MF_STRING|MF_ENABLED,uidCmdFirst + id++, L"Win 7");
InsertMenu(hmenu, 4,MF_BYPOSITION|MF_POPUP, UINT(submenu), L"Windows");
SetMenuItemBitmaps(hmenu,id++, MF_BITMAP, hBitmap,hBitmap);
return id;
}
CreatePopUpMenu也可以使用。你只需要使用InsertMenu而不是AppendMenu。
阅读SetMenuItemBitmap的定义 https://learn.microsoft.com/en-us/windows/desktop/api/winuser/nf-winuser-setmenuitembitmaps 没有MF_BITMAP标志这样的东西。
选项是MF_BYCOMMAND和MF_BYPOSITION。 似乎您正在尝试使用MF_BYCOMMAND但必须使用已经提供给 MenuItens 的相同值。
您还必须检查位图的格式。SetMenuItemBitmaps只接受单色。我在谷歌上搜索做同样的事情,并在这里取得了成功。感谢您带路。
相关文章:
- Win32编译器选项和内存分配
- 无法获取菜单选择以运行函数.C++
- C++win32 API创建多个类似视口的窗口
- WM_CTLCOLORSTATIC从未在WIN32应用程序中触发
- 检测win32服务创建和删除的最佳方法
- 如何在win32的窗口类中设置动态菜单?
- SDL2 + Win32 API 菜单栏单击事件不起作用
- 在哪里对 Win32 菜单进行编码
- 如何将SDL与Win32菜单一起使用
- 如何在 c++ win32 API 中向菜单项添加图标
- 纯 Win32 C++(无 WTL、MFC 等)中的自定义菜单边框
- 在Win32程序中C++,如何修改菜单的标题?
- Win32 可点击的右键单击菜单
- visual InsertMenu/AppendMenu - 如何使用C++和win32将图标添加到菜单和子菜单
- 使用资源中的PNG图标显示Win32弹出菜单
- 如何在win32/mfc应用程序中隐藏/折叠主菜单
- c++ win32防止上下文菜单关闭
- c++ win32高效的上下文菜单和子菜单
- c++ win32动态菜单-哪个菜单项被选中
- 用于创建菜单栏的c++ win32程序(程序编译并运行,也显示窗口但不显示菜单栏)