duilib List右键菜单的响应
flyfish
版本 ultimate
自定义窗口是CCustomWnd
在头文件中定义
CListUI *m_pList;
CMenuWnd* m_pMenu;
CStdStringPtrMap m_MenuInfos;
实现文件
void CCustomWnd::InitWindow()
{
m_pList=static_cast<CListUI*>(m_PaintManager.FindControl(_T("main_list")));
m_pList->SetContextMenuUsed(true);
m_pList->SetItemRSelected(true);
//注意这两个属性
}
void CCustomWnd:::Notify(TNotifyUI& msg)
{
if (msg.sType == DUI_MSGTYPE_MENU) //!该消息是触发右键菜单
{
CString strName = m_pList->GetName();
int nSel = m_pList->GetCurSel();
CListContainerElementUI* p = (CListContainerElementUI*)(m_pList->GetItemAt(nSel));
//可以利用p->GetTag();获取其他信息
CPoint point = msg.ptMouse;
ClientToScreen(m_hWnd, &point);
m_pMenu = CMenuWnd::CreateMenu(NULL, _T("menu.xml"), point, &m_PaintManager, &m_MenuInfos);
CMenuUI* rootMenu = m_pMenu->GetMenuUI();
rootMenu->RemoveAll();//移除原来的菜单,动态增加菜单
if (rootMenu != NULL)
{
CMenuElementUI* pNew = new CMenuElementUI;
pNew->SetName(_T("menu_item"));
pNew->SetText(_T("菜单项"));
rootMenu->Add(pNew);
}
m_pMenu->ResizeMenu();
}
}
LRESULT CCustomWnd:::HandleCustomMessage(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
LRESULT lRes = 0;
bHandled = FALSE;
switch (uMsg)
{
case WM_MENUCLICK:
{
MenuCmd* pMenuCmd = (MenuCmd*)wParam;
if (pMenuCmd != NULL)
{
BOOL bChecked = pMenuCmd->bChecked;
CDuiString sMenuName = pMenuCmd->szName;
CDuiString sUserData = pMenuCmd->szUserData;
CDuiString sText = pMenuCmd->szText;
m_PaintManager.DeletePtr(pMenuCmd);
if (sMenuName == L"menu_item") //
{
//处理菜单事件
}
}
break;
}
}
}
xml文件
主要是菜单的
<?xml version="1.0" encoding="utf-8"?>
<Window width="100" >
<Font ID="1234" name="微软雅黑" size="12" bold="false" default="true" />
<!-- Menu样式 -->
<Default Font="1234" name="Menu" shared="true" value="itemfont="8" bordersize="1" borderround="2,2" bordercolor="0x303132" inset="2,2,2,2" itemtextpadding="30,0,0,0" bkimage="file='menu/menu_bk.png' corner='26,2,2,2' source='6,6,44,24'" itemhottextcolor="0xFFFF0000" itemselectedbkcolor="0xFF338ACA"" />
<Menu>
<MenuElement name="menu_name" text="menu_text" icon="menu/menu_pic.png" iconsize="9,9"/>
</Menu>
</Window>