c++ - 根据特定设计在win32中平铺菜单项
问题描述
我正在 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 个图标。
我怎样才能达到同样的效果?
解决方案
您可以在 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");
}
更多参考:菜单项分隔符和换行符,在多列中显示菜单项
推荐阅读
- nginx - Nginx + Docker 容器
- keras - keras lstm层中的多个内核是什么意思?
- android - 如何在 Android(使用 NDK)和 ARM 处理器上使用 OpenCV C++ 应用程序
- git - Git:Mojave 更新后无法解析 bitbucket.org
- talend - 如何根据输入值的数量运行不同的子作业 Talend
- dsl - 调用“内爆”期间无法解释的 IllegalArgument
- python - 如何在列的两个值之间选择数据框中的所有行
- vue.js - Vue js 和 VS 代码 - 绝对文件路径没有 Intellisense
- r - 基于各个子组的最后一个值的累积和
- abap - 如何一一选择表格行?