仿酷狗音乐播放器开发日志二十五 duilib右键事件的不足的bug修复

转载请说明原出处,谢谢~~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;
			}
		}

      在这里直接把return;语句注释掉就能够了。而后我在音乐和电台控件中增长了 UIEVENT_CONTEXTMENU消息的处理代码。这样就能够正常使用右键菜单了。

        剩下的就是在主窗体的Notify函数里正常处理menu消息了。


  Redrain  2014.8.27code

相关文章
相关标签/搜索