社区
界面
帖子详情
MFC cdockablepane OnContextMenu弹出右键菜单后点击pane的其它区域菜单怎么消失
kuaiziha
2015-10-21 11:28:47
我是在 cdockablepane上覆盖了一层dialog,当在pane的头部右键OnContextMenu弹出右键菜单后,再点击pane内部的其它区域时右键菜单不会消失,请问怎么处理
...全文
192
1
打赏
收藏
MFC cdockablepane OnContextMenu弹出右键菜单后点击pane的其它区域菜单怎么消失
我是在 cdockablepane上覆盖了一层dialog,当在pane的头部右键OnContextMenu弹出右键菜单后,再点击pane内部的其它区域时右键菜单不会消失,请问怎么处理
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
1 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
向立天
2016-03-15
打赏
举报
回复
您好 我是本版版主 此帖已多日无人关注 请您及时结帖 如您认为问题没有解决可按无满意结帖处理 另外本版设置了
疑难问题汇总帖
并已在版面置顶 相关规定其帖子中有说明 您可以根据规定提交您帖子的链接 如您目前不想结帖只需回帖说明 我们会删除此结帖通知 见此回复多日内无回应 我们将强制结帖 相关规定详见界面
界面版关于版主结帖工作的具体办法
DhtmlxTree-dhtmlxmenu实现在节点上
右键
弹出
菜单
对dhtmlXTree进行一个小的扩展 需求1: 动态生成树形
菜单
,每个节点都有各自的URL地址,单击不同的节点框架页的右侧跳转到该节点所对应的URL。(框架页说明:左边是树形
菜单
;右边是显示页面相应信息的页面) 分析: dhtmlXTree提供了很好的添加,删除节点的方法,故选择dhtmlXTree。 但是dhtmlXTree不能满足"每个节点都有各自的URL地址,单击不同的节点框架页的右侧跳转到该节点所对应的URL"这点需求,因次想到了对dhtmlXTree进行一个小的扩展,即在其节点对象原有属性的基础上,再添加两个扩展属性。具体操作如下: 1、找到定义节点对象的那个函数(或方法) function dhtmlXTreeItemObject(itemId,itemText,parentObject,treeObject,actionHandler,mode) 修改为 function dhtmlXTreeItemObject(itemId,itemText,parentObject,treeObject,actionHandler,mode,url,target) 并在方法体中添加赋值语句:this.itemURL=url;this.itemTarget=target; 2、然后修改所有与dhtmlXTreeItemObject有关(直接或者间接相关)的方法: _attachChildNode,insertNewItem,insertNewChild,insertNewNext,_recreateBranch,_parseXMLTree 注:_parseXMLTree方法是与loadXML,loadXMLString相关的。 在这些方法中生成节点的语句中添加相应的参数和语句,以支持新添加的属性itemURL,itemTarget。 需求2: 为dhtmlXTree树上的每一个节点添加
右键
菜单
。附:在树上的节点上点
右键
时才会生成
菜单
,空白
区域
单击时不会生成
菜单
。 分析: 1、用 dhtmlXTree + dhtmlxmenu 实现。 2、 用dhtmlxmenu生成
菜单
的部分代码: var menu = new dhtmlXMenuObject(); menu.setImagePath("imgs/"); menu.setIconsPath("images/"); menu.renderAs
ContextMenu
(); menu.loadXML("dhtmlxmenu.xml?e="+new Date().getTime()); menu.addContextZone("treeboxbox_tree"); menu.addContextZone方法是为了把
菜单
添加到指定
区域
。 3、dhtmlXTreeObject.prototype._createItem方法是构造树形
菜单
上元素的具体实现方法。看这个方法的具体操作,可以发现它为每一个节点构建了一个table,节点的内容(即名字)放置在一个span中。 4、考虑到dhtmlxmenu实在指定的
区域
构建
菜单
,所以可以为dhtmlXTree树上的每一个节点添加
右键
事件,在这个
右键
事件里获得该节点对象所对应的
区域
,然后在这个
区域
内构建Menu
菜单
。 难点和解决方案: 1、怎样获得dhtmlXTree树上的每一个节点对象所对应的
区域
?(dhtmlXTreeObject.prototype._createItem方法没有为这个节点的span设置id) 解决方法: 在dhtmlXTreeObject.prototype._createItem方法中添加一个为span设置id的语句: 即: 在itemObject.span=
doc
ument.createElement('span'); itemObject.span.className="standartTreeRow"; 后,新添加一句 itemObject.span.id="treeNode_"+itemObject.id;//为这个span新增一个Id属性 2、为dhtmlXTree树上的每一个节点添加
右键
事件,在这个
右键
事件里获得该节点对象所对应的
区域
,然后在这个
区域
内构建Menu
菜单
。 解决方法: a、为dhtmlXTree树上的每一个节点添加
右键
事件: tree.setOnRightClickHandler(treeOnRegihtClick);//
右键
事件 b、构建Menu
菜单
: var menu = new dhtmlXMenuObject(); function treeOnRegihtClick(id){ alert("
右键
"+" span.id:"+tree.getItem(id).span.id); menu.setImagePath("imgs/"); menu.setIconsPath("images/"); menu.renderAs
ContextMenu
(); menu.loadXML("dhtmlxmenu.xml?e="+new Date().getTime()); menu.addContextZone(tree.getItem(id).span.id);alert("width:"+tree.getItem(id).span.clientWidth); //var X=tree.getItem(id).span.getBoundingClientRect().left; //var Y=tree.getItem(id).span.getBoundingClientRect().top; var X=
doc
ument.getElementById('mouseXPosition').value;//获得鼠标的横坐标位置 var Y=
doc
ument.getElementById('mouseYPosition').value;//获得鼠标的纵坐标位置 menu.show
ContextMenu
(X,Y);//调用show
ContextMenu
方法显示
菜单
说明:如果这儿不加上这条语句的话,第一次
点击
右键
时只能生成
菜单
,但是显示不出
菜单
,下次
点击
右键
Menu
菜单
才能
弹出
。 //menu._show
ContextMenu
(X,Y,tree.getItem(id).span.id); } c、用 javascript 获取当页面上鼠标(光标)位置 <script type="text/javascript"> // 说明:获取鼠标位置 function mousePosition(ev){ if(ev.pageX || ev.pageY){ return {x:ev.pageX, y:ev.pageY}; } return { x:ev.clientX +
doc
ument.body.scrollLeft -
doc
ument.body.clientLeft, y:ev.clientY +
doc
ument.body.scrollTop -
doc
ument.body.clientTop }; }
doc
ument.onmousemove = mouseMove; function mouseMove(ev){ ev = ev || window.event; var mousePos = mousePosition(ev);
doc
ument.getElementById('mouseXPosition').value = mousePos.x;
doc
ument.getElementById('mouseYPosition').value = mousePos.y; }
js实现 html 鼠标
右键
菜单
根目录
菜单
一
菜单
二 go 修改 删除 function showMenu(id){ menuForm.id.value = id; if("" == id){ } else{ popMenu(itemMenu,100,"111"); } event.returnValue=false; event.cancelBubble=true; return false; } /** *显示
弹出
菜单
*menuDiv:
右键
菜单
的内容 *width:行显示的宽度 *rowControlString:行控制字符串,0表示不显示,1表示显示,如“101”,则表示第1、3行显示,第2行不显示 */ function popMenu(menuDiv,width,rowControlString){ //创建
弹出
菜单
var pop=window.createPopup(); //设置
弹出
菜单
的内容 pop.
doc
ument.body.innerHTML=menuDiv.innerHTML; var rowObjs=pop.
doc
ument.body.all[0].rows; //获得
弹出
菜单
的行数 var rowCount=rowObjs.length; //循环设置每行的属性 for(var i=0;i
菜单的
菜单
pop.
doc
ument.on
contextmenu
=function(){ return false; } //选择
右键
菜单
的一项后,
菜单
隐藏 pop.
doc
ument.onclick=function(){ pop.hide(); } //显示
菜单
pop.show(event.clientX-1,event.clientY,width,rowCount*25,
doc
ument.body); return true; } function create(){ alert("create" + menuForm.id.value + "!"); } function update(){ alert("update" + menuForm.id.value + "!"); } function del(){ alert("delete" + menuForm.id.value + "!"); } function clickMenu(){ alert("you click a menu!"); }
修改CEdit
右键
菜单
的派生类
修改CEdit
右键
菜单
的派生类,如只修改,删除afx_msg void On
ContextMenu
(CWnd* pWnd, CPoint point); };消息函数,屏蔽的话,就保留。当然也可以删除另外两个函数
右键
弹出
菜单
<input type="text" id="jdid" /> [removed] d = new dTree('d'); d.add(0,-1,'My example tree'); d.add(1,0,'Node 1','examplea1.html'); d.add(2,0,'Node 2','examplea2.html'); d.add(3,1,'Node 1.1','examplea3.html'); [removed](d); [removed] <!--
右键
菜单
的源-->
添加节点
修改节点
删除节点
</body> [removed] //所有div标签class为dTreeNode的绑定此
右键
菜单
$('div.dTreeNode').
contextMenu
('myMenu1', { on
ContextMenu
: function(e) {
doc
ument.getElementById("jdid").value=$(e.target).attr('id'); if ($(e.target).attr('id') == ''||!checkRate($(e.target).attr('id'))) return false; else return true; }, onShowMenu: function(e, menu) { return menu; } }); //所有class为gen的span标签都会绑定此
右键
菜单
$('span.gen').
contextMenu
('myMenu1', { on
ContextMenu
: function(e) {
doc
ument.getElementById("jdid").value=$(e.target).attr('id'); if ($(e.target).attr('id') == ''||!checkRate($(e.target).attr('id'))) return false; else return true; }, onShowMenu: function(e, menu) { return menu; } });
右键
菜单
(支持快捷键)
一般般的程序,大虾们见笑了 void CMainFrame::OnTestZw() { // TODO: Add your command handler code here CClientDC DC(this); DC.TextOut(400,400,"鼠标
右键
"); } void CMainFrame::OnTestYw() { // TODO: Add your command handler code here CClientDC DC(this); DC.TextOut(100,100,"right click"); } void CMainFrame::On
ContextMenu
(CWnd* pWnd, CPoint point) { // TODO: Add your message handler code here CMenu menu; if (menu.LoadMenu(IDR_MAINFRAME)) { CMenu* pPopup = menu.GetSubMenu(2); pPopup->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,point.x, point.y, this); } menu.DestroyMenu(); }
界面
15,979
社区成员
115,896
社区内容
发帖
与我相关
我的任务
界面
VC/MFC 界面
复制链接
扫一扫
分享
社区描述
VC/MFC 界面
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章