转载请说明原出处,谢谢~~html
虽然仿酷狗的各个菜单早就写好了,可是一直没有附加到程序里。今天把菜单和播放列表控件关联时发现了问题。函数
和播放列表相关的菜单有三个,分别是每一个音乐项目控件相关的菜单、分组的菜单、音乐电台的菜单。应该的效果以下:测试
本来我想着只要给对应的控件设置menu属性,而后在代码里响应消息弹出菜单就能够了。可是实际测试发现,控件根本没法响应到menu消息,缘由在于:音乐项目、电台项目这些控件都是靠许多子控件组合而成的,换句话就是他们上面覆盖了不少其余子控件,子控件挡住了音乐项目和电台项目控件的界面,让他没法响应menu消息。ui
若是把音乐项目、电台项目控件的因此子控件都加上menu消息而且处理,是能够正常弹出菜单的。可是这不是一个优雅的解决办法。this
在duilib中,右键菜单的消息事件是UIEVENT_CONTEXTMENU,对应的系统消息是WM_CONTEXTMENU。他在CControlUI类的DoEvent函数中被处理,可是函数处理完成后直接return;返回,并无把消息传递给父控件,因此致使了这个bug。源码以下:spa
if( event.Type == UIEVENT_CONTEXTMENU ) { if( IsContextMenuUsed() ) { m_pManager->SendNotify(this, DUI_MSGTYPE_MENU, event.wParam, event.lParam); return; } }
Redrain 2014.8.27code