根据特定设计在win32中平铺菜单项
Posted
技术标签:
【中文标题】根据特定设计在win32中平铺菜单项【英文标题】:Tiling menuItems in win32 as per particular design 【发布时间】:2021-04-27 06:49:45 【问题描述】:我正在 win32 中创建一个弹出菜单项。我能够创建一个弹出菜单项,然后向其中添加了一些图标。这是它的样子
示例代码
HMENU Controls = CreatePopupMenu();
InsertMenu(Controls, 0 , MF_STRING, 1, L"FirstMenu00");;
static HBITMAP bmpSource = NULL;
bmpSource = (HBITMAP)LoadImage(NULL, L"C:\\Users\\mac\\bit.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
MENUITEMINFO mii;
mii.cbSize = sizeof(mii);
mii.fMask = MIIM_ID | MIIM_BITMAP | MIIM_DATA;
mii.wID = 1;
mii.hbmpItem = bmpSource;// &paHbm[i];
bool st = InsertMenuItem(Controls, 10, TRUE, &mii);
std::string errSTr = GetLastErrorAsString();
TrackPopupMenuEx(Controls, TPM_LEFTALIGN | TPM_BOTTOMALIGN | TPM_LEFTBUTTON | TPM_HORPOSANIMATION, xPos, yPos, hwnd, NULL);
我正在尝试按以下方式排列菜单图标 即我正在尝试创建一个模式,其中第一行有 2 个图标,下一行有 3 个图标。
我怎样才能达到同样的效果?
【问题讨论】:
添加用于创建弹出菜单项的代码? @anatolyg 完成。 @Song Zhu 有什么建议吗? 【参考方案1】:您可以在 AppendMenu 函数中使用 MF_MENUBREAK 或 MF_MENUBARBREAK 标志来创建多列菜单项。似乎每个 raw 都有相同的列。 这是一个您可以参考的示例:\
HMENU hmenuPopup = CreatePopupMenu();
// Add the bitmap menu items to the menu.
bool st = AppendMenu(hmenuPopup, MF_BITMAP, uID, (LPCWSTR)paHbm);
if (!st)
ErrorExit(L"AddBitmapMenu");
st = AppendMenu(hmenuPopup, MF_BITMAP | MF_MENUBARBREAK, uID + 1, (LPCWSTR)LoadBitmap(g_hInstance, MAKEINTRESOURCE(IDB_BITMAP2)));
if (!st)
ErrorExit(L"AddBitmapMenu");
更多参考:Menu Item Separators and Line Breaks、Displaying menu items in multiple columns
【讨论】:
以上是关于根据特定设计在win32中平铺菜单项的主要内容,如果未能解决你的问题,请参考以下文章
如何在c ++ win32 API中将图标添加到菜单项[重复]
Creating Context Menu / 创建上下文菜单项 / Win32, VC++, Windows, DLL, ATL, COM