Files
EzUI/sources/Menu.cpp

54 lines
940 B
C++
Raw Normal View History

2026-01-24 22:42:46 +08:00
#include "Menu.h"
namespace ezui {
UINT_PTR g_nextId = WM_APP + 1;
inline UINT_PTR GenerateMenuId() {
++g_nextId;
return g_nextId;
}
Menu::Menu(Object* parentObj) : Object(parentObj)
{
m_hMenu = ::CreatePopupMenu(); // 创建空菜单
}
UINT_PTR Menu::Append(const UIString& text)
{
UINT_PTR id = GenerateMenuId();
if (m_hMenu) {
::AppendMenuW(m_hMenu, MF_STRING, id, text.unicode().c_str());
}
return id;
}
void Menu::Remove(UINT_PTR itemID)
{
if (!m_hMenu) return;
int count = ::GetMenuItemCount(m_hMenu);
for (int i = 0; i < count; ++i)
{
MENUITEMINFO mii = {};
mii.cbSize = sizeof(mii);
mii.fMask = MIIM_ID;
if (::GetMenuItemInfo(m_hMenu, i, TRUE, &mii)) {
if (mii.wID == itemID) {
::RemoveMenu(m_hMenu, i, MF_BYPOSITION);
break;
}
}
}
}
Menu::~Menu()
{
if (m_hMenu) {
::DestroyMenu(m_hMenu);
}
}
HMENU Menu::HMenu()
{
return m_hMenu;
}
};