网上有很多,都特么不好使。
有的直接在xml中使用了Menu
也就是

<menu>
...
</menu>

这样子要重新编译duilib,不然那不识别这种形式。
再就是 动态添加的问题。
网上的demo大部分是通过xml来显示菜单的,菜单的层级结构也是定死的。不好用。
最后我用的是官网的那个暂时解决了问题。

说暂时,是因为,代码不具有通用性。
这是菜单的xml

<?xml version="1.0" encoding="utf-8"?>
<Window name="menu_window" bktrans="true"  size="100,82"><Font id="0" name="宋体" size="13" bold="false"/><Font id="1" name="宋体" size="12"/><Font id ="3" name="微软雅黑" size="13" bold="false" italic="false" />
<VerticalLayout bkimage="file='menu_bk.png' corner='40,8,8,8'" hole="false"><List name="menu_list"  header="hidden" inset="8,8,8,8" itemhotimage="file='menu_item_select_hot.png' corner='2,2,2,2'" itemdisabledbkcolor="#FF0000FF"><ListContainerElement name="menu_Open" height="22"><Label text="打开" align="center" name="open_label" mouse="false"/></ListContainerElement></List>
</VerticalLayout>
</Window>

动态添加item的方式。

         CMenuWnd* pMenu = new CMenuWnd();if (pMenu == NULL) { return; }//传入item的值pMenu->setMenuType("showNumberMenu");pMenu->setContentList(ZHRWConfigSettings::GetInstance()->getAllShowNumberList());//POINT pt = { msg.ptMouse.x, msg.ptMouse.y };//::ClientToScreen(*this, &pt);CDuiRect rcWindow;GetWindowRect(m_hWnd, &rcWindow);rcWindow.top = rcWindow.top + msg.pSender->GetPos().bottom;rcWindow.left = rcWindow.left + msg.pSender->GetPos().left;POINT pt = { rcWindow.left ,rcWindow.top };pMenu->Init(msg.pSender, pt);

其中setContentList()接口是我自定义的。

LRESULT OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled){m_pm.Init(m_hWnd);CDialogBuilder builder;CControlUI* pRoot = builder.Create(_T("menu_show_number.xml"), (UINT)0, NULL, &m_pm);ASSERT(pRoot && "Failed to parse XML");m_pm.AttachDialog(pRoot);//尝试自定义添加CListUI* pUiList = static_cast<CListUI*>(m_pm.FindControl(_T("menu_list")));pUiList->RemoveAll();for (auto it = m_contentList.begin();it != m_contentList.end(); it++){string t_strContent = *it;CListContainerElementUI* pContanerUi = new CListContainerElementUI();CLabelUI* pLabelUi = new CLabelUI();pLabelUi->SetText(t_strContent.c_str());pLabelUi->SetFont(3);pLabelUi->SetFixedHeight(24);pLabelUi->SetTextPadding(CDuiRect(4, 0, 0, 0));pContanerUi->Add(pLabelUi);pContanerUi->SetFixedHeight(24);pContanerUi->SetName(m_menuType.c_str());pContanerUi->SetUserData(t_strContent.c_str());pUiList->Add(pContanerUi);}int iHeight = 0;if (m_contentList.size() > 0){iHeight = m_contentList.size() * 24 + 16; //}ResizeClient(110, iHeight);int iCount = pUiList->GetCount();CDuiRect rcWnd;GetWindowRect(m_hWnd, &rcWnd);//尝试修改CLabelUI* pLabelItem = static_cast<CLabelUI*>(m_pm.FindControl(_T("open_label")));pLabelItem->SetText("World");m_pm.AddNotifier(this);m_pm.SetRoundCorner(3, 3);AdjustPostion();return 0;}

这里面循环添加菜单的item。然后手动设置了菜单总的大小。

就这样。

duilib菜单动态添加相关推荐

  1. html表单中动态添加下拉框,antd Select下拉菜单动态添加option里的内容操作

    antd Select下拉菜单动态添加option里的内容,通过form表单绑定select选中的值 提供一个公共的方法,每次只需去调用这个方法就行了 //这里是示例数据格式 let giftScop ...

  2. Dwz点击左侧菜单动态添加Tab标签图标

    此篇文章是基于ztree实现,若是dwz与ztree未整合,请先按照<DWZ和zTree整合(实现版)>文章整合. 需求描述: 点击左侧树形菜单(target=navTab)时,在左侧Ta ...

  3. MFC : 给主菜单动态添加删除一级子菜单

    添加删除一级子菜单 private:BOOL AddDyMenu(DWORD dwMenuRcId, TCHAR* pMenuName);BOOL DelDyMenu(TCHAR* pMenuName ...

  4. 在Winform中菜单动态添加“最近使用文件”

    最近在做文件处理系统中,要把最近打开文件显示出来,方便用户使用.网上资料有说,去遍历"C:\Documents and Settings\Administrator\Recent" ...

  5. VB.net 动态添加菜单响应单击事件

    以前 VB 6.0 我要调一堆 API 感觉好过瘾 呵呵 现在找不到这种感觉了 哈!记得vb 6 的 时候生气用Win32写了个Clock  掉了上百个 API 连VB 6 的窗体都没用, 那个叫过瘾 ...

  6. VB.net MenuStrip控件通过数据库生成多级动态菜单并添加单击事件

    VB.net MenuStrip控件通过数据库生成多级动态菜单并添加单击事件 个人小白,一个多月前想通过 MenuStrip控件调用数据库数据生成多级联动下拉菜单,结果网上的资料都只是部分代码可用.经 ...

  7. 【前端】Vue+Element UI案例:通用后台管理系统-登陆不同用户显示不同菜单、动态添加路由

    文章目录 目标 代码 0.动态地显示菜单:store 1.动态注册路由 2.解决刷新后摆平问题 总代码 本篇修改的代码文件 tab.js 参考视频: VUE项目,VUE项目实战,vue后台管理系统,前 ...

  8. 动态添加DevExpress 套件中 dxBar的菜单项目

    Written by flexitime PS: 有鉴于几位热心网友的意见,所以还是决定写一下一些技术相关的BLOG,并希望能有网友不吝赐教 DevExpress是一个十分有名的Delphi控件套装, ...

  9. Contextmenustrip动态添加多级菜单

    1.如果只是一级菜单就解决的话,使用控件Contextmenustrip,动态添加ToolStripMenuItem就可以了, 自己设置一下name/click/text的属性就可以了 2.如果是多级 ...

  10. 如何在IE右键菜单中添加菜单项(转)

    (来自:http://www.jaron.cn/chs_scripts/7/2003-11/20031125111738-101413.html) 如果使用过Netants的朋友可能都知道,NetAn ...

最新文章

  1. Webpack原理与实践
  2. 刚接触机器学习这一个月我都做了什么?
  3. 牛客多校 - Minimum-cost Flow(最小费用最大流+贪心)
  4. Element UI的Table用法
  5. 让 Python 更加充分的使用 Sqlite3
  6. Javascript取select的选中值和文本
  7. java list能作为入参吗_springmvc 不支持 List 对象作为 方法的参数
  8. 嵌入式Linux系统编程学习之三十三网络相关概念
  9. Asp.Net Core使用Log4Net优化日志【项目开源】
  10. 心电图图平板运动测试软件,心电图和平板运动可以检查出心
  11. python数据科学课后答案_Python数据科学-技术详解与商业实践-第五讲作业
  12. java doc、docx、pdf格式互转
  13. 反编译工具Reflector下载(转)
  14. Labview各版本及开发工具模块下载
  15. bin文件转换成html,bin如何改成mp4
  16. 初探三维计算机视觉(三维重建) —— 相机模型 + 双目系统 + 点云模型
  17. MFC与DX11结合
  18. 国庆节,企查查我来啦~
  19. 莎士比亚名言录(中英对照整理版,加出处by 澈)
  20. JAVA-API(一)

热门文章

  1. 图像处理之直方图均衡和直方图匹配
  2. AVATR阿维塔11维修手册电路图技术资料
  3. 百度地图实战Android开发视频教程
  4. nutch2.3.1 mysql_nutch 安装部署 以nutch2.3.1 为例
  5. 国科大.模式识别与机器学习.期末复习笔记手稿+复习大纲
  6. Linux下局域网通信软件(聊天室,附源码)
  7. Greenplum 安装部署 单机版安装(Linux)
  8. 布衣联盟装机常用软件光盘——金鼠报春版
  9. filezilla显示乱码(已解决)
  10. RapidMiner Studio入门