首页 > 解决方案 > 根据特定设计在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 个图标。

我怎样才能达到同样的效果?

在此处输入图像描述

标签: c++winapi

解决方案


您可以在 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");
}

更多参考:菜单项分隔符和换行符在多列中显示菜单项


推荐阅读