54 lines
940 B
C++
54 lines
940 B
C++
|
|
#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;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
};
|