doradoMun右键菜单实现

合集下载

菜单(二).动态菜单和右键菜单

菜单(二).动态菜单和右键菜单

菜单(二)自定义动态子菜单、右键菜单例程:07_menu_dynamic_shape(增加动态子菜单“形状”)08_menu_dynamic_shape_once_check(check“形状”)09_menu_dynamic_shape_once_check_response(CustomMessageMap,CView&CFrameWnd Access)(完成“形状”子菜单的所有画图功能) 10_menu_dynamic_allFunctions(完成“形状”、“颜色”的所有功能)(“颜色”子菜单是用图片表示的)11_menu_dynamic_allFunctions_OnCommandRange(该“红”“绿”“蓝”为一个响应函数)12_menu_dynamic_allFunctions_OnCommandRange_TrackPopupMenu(弹出右键菜单)自定义菜单(1) 如何编写自定义POPUP菜单07_menu_dynamic_shape中:(08_menu_dynamic_shape_once_check )void CMainFrame::OnDynamicShape(){// TODO: Add your command handler code hereCMenu menuShape;menuShape.CreatePopupMenu();menuShape.AppendMenu(0,ID_SHAPE_LINE,"&Line");menuShape.AppendMenu(0,ID_SHAPE_RECTANGLE,"&Rectangle");menuShape.AppendMenu(0,ID_SHAPE_ELLIPSE,"&Ellipse");CMenu* pmainMenu;pmainMenu = GetMenu();pmainMenu->AppendMenu(MF_POPUP,(UINT)menuShape.m_hMenu,"形状");menuShape.Detach();DrawMenuBar();}ID_SHAPE_LINE等在Resource.h中定义:#define ID_SHAPE_LINE 200#define ID_SHAPE_RECTANGLE 201#define ID_SHAPE_ELLIPSE 202整数值不能和已有的值重复(2)自定义菜单操作放在CMainFrame中,不能放在CView中CMainFrame中有菜单,Cview中没有菜单(3)消息响应层次CView----CDoc----CFrameWnd----Capp同一个消息在CView中响应后,就不在后面的类中再次响应了,哪怕后续类中也有相应的消息响应函数(4) 如何在CMainFrame中响应菜单,特别是处理视图中的变量09_menu_dynamic_shape_once_check_response(CustomMessageMap,CView&CFrame WndAccess)从CMainFrame中访问CView:GetActiveView ()函数,原型:CView* CFrameWnd::GetActiveView( ) const;void CMainFrame::OnShapeLine(){ CDynamicMenuView * pView = (CDynamicMenuView *)GetActiveView();pView->boolLine = TRUE;}(4.1)自定义菜单项不能通过ClassWizard 等对话框添加消息映射手工添加的3个步骤:(a)在CMainFrame的定义文件MainFrm.h 中添加声明:afx_msg void OnShapeLine();(b) 在实现文件MainFrm.cpp中添加消息映射宏:BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)//{{AFX_MSG_MAP(CMainFrame)ON_WM_CREATE()……ON_COMMAND(ID_SHAPE_LINE,OnShapeLine)……//}}AFX_MSG_MAPEND_MESSAGE_MAP()(c) 在实现文件MainFrm.cpp中添加消息响应函数void CMainFrame::OnShapeLine(){ CDynamicMenuView * pView = (CDynamicMenuView *)GetActiveView();pView->boolLine = TRUE;pView->boolEllipse = FALSE;pView->boolRectangle = FALSE;}(4.2) 如果不识别CDynamicMenuView,要在CMainFrame文件(MainFrm.cpp)中增加头文件#include "DynamicMenuView.h"(5)全部功能完成后的程序:10_menu_dynamic_allFunctions颜色菜单用位图表示红绿蓝void CMainFrame::OnDynamicColor(){// TODO: Add your command handler code hereif(!boolColor){ boolColor = TRUE;boolShape = FALSE;CMenu menuColor;menuColor.CreatePopupMenu();menuColor.AppendMenu(0,ID_COLOR_RED,&bmpRed);menuColor.AppendMenu(0,ID_COLOR_GREEN,&bmpGreen);menuColor.AppendMenu(0,ID_COLOR_BLUE,&bmpBlue);CMenu * pMainMenu = GetMenu();pMainMenu->AppendMenu(MF_POPUP,(UINT)menuColor.m_hMenu,"颜色");DrawMenuBar();menuColor.Detach();}else{ CMenu * pMainMenu = GetMenu();pMainMenu->DeleteMenu(5,MF_BYPOSITION);DrawMenuBar();boolColor = FALSE;boolShape = FALSE;}}bmpRed是在CMainFrame中定义的数据成员:CBitmap bmpRed,bmpBlue,bmpGreen;初始化:bmpRed.LoadBitmap(IDB_BITMAP_RED);上面的else分支是删除菜单项“颜色”,恢复原始主菜单(6)同一个消息映射响应一组连续的菜单项11_menu_dynamic_allFunctions_OnCommandRangeON_COMMAND_RANGEvoid CMainFrame::OnColor(UINT nID){ CDynamicMenuView * pView = (CDynamicMenuView *)GetActiveView();pView->nColor = nID - ID_COLOR_RED;InvalidateRect(NULL);}手工添加消息响应的函数原型和宏:MainFrm.h中:protected://{{AFX_MSG(CMainFrame)afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);……afx_msg void OnColor(UINT nID);……//}}AFX_MSGDECLARE_MESSAGE_MAP()MainFrm.cpp中:BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)//{{AFX_MSG_MAP(CMainFrame)ON_WM_CREATE()……ON_COMMAND_RANGE(ID_COLOR_RED,ID_COLOR_BLUE,OnColor)……//}}AFX_MSG_MAPEND_MESSAGE_MAP()(7)右键菜单的加载鼠标右键事件放在View中响应,但右键菜单要属于MainFrame12_menu_dynamic_allFunctions_OnCommandRange_TrackPopupMenuvoid CDynamicMenuView::OnRButtonDown(UINT nFlags, CPoint point){// TODO: Add your message handler code here and/or call defaultCMainFrame * pFrame = (CMainFrame*)GetParentFrame();CMenu menuRight;menuRight.CreatePopupMenu();menuRight.AppendMenu(0,ID_COLOR_RED,&(pFrame->bmpRed));menuRight.AppendMenu(0,ID_COLOR_GREEN,&(pFrame->bmpGreen));menuRight.AppendMenu(0,ID_COLOR_BLUE,&(pFrame->bmpBlue));ClientToScreen(&point);menuRight.TrackPopupMenu(TPM_RIGHTBUTTON,point.x,point.y,pFrame);menuRight.DestroyMenu();CView::OnRButtonDown(nFlags, point);}在CView中访问CMainFrame的成员:GetParentFrame()CFrameWnd* CWnd::GetParentFrame( ) const;(8)SDI程序中各类间的关系框架、文档、视图类之间的调用关系1、主框架(CFrameWnd)中访问视图(CView)CView* GetActiveView() const;通常定义的视图为CView的派生类,在调用自定义视图对象的方法时应该这样写:((CMouseKeyView*)GetActiveView())->MyFunc();2、主框架(CFrameWnd)中访问文档(CDocument)GetActiveDocument,返回CDocument对象;3、在视图(CView)中访问文档(CDocument)inline CMouseKeyDoc* CMouseKeyView::GetDocument(){return (CMouseKeyDoc*)m_pDocument;}4、在视图(CView)中访问框架(CFrameWnd)CFrameWnd* GetParentFrame() const;5、在文档(CDocument)中访问框架(CFrameWnd)CWnd* AfxGetMainWnd();CWnd* AfxGetApp()->m_pMainWnd;6、在文档(CDocument)中访问视图(CView)UpdateAllViews功能:通知所有的视图文档已被修改的信息原型:void UpdateAllViews(CView* pSender, // 要更新的视图指针,如果希望更新所有视图,将此参数设为NULL LPARAM lHint=0L, // 包含更改消息的通知CObject* pHint=NULL // 保管更改消息的对象}7、在其他类中访问文档类(CDocument)CDocument* GetDocument(){CFrameWnd* frm=(CFrameWnd*)::AfxGetMainWnd();ASSERT(frm);CDocument* pDoc=frm->GetActiveDocument();ASSERT(pDoc);ASSERT(pDoc->IsKindOf(RUNTIME_CLASS(CMouseKeyDoc)));return (CMouseKeyDoc*)pDoc; }[注:资料转载自网上]。

oled多级菜单实现方法

oled多级菜单实现方法

OLED多级菜单实现方法引言随着智能设备的普及,O LE D(Or ga ni cLi g ht-E mi tt in gD iod e)显示屏在各种应用中得到广泛应用。

在许多情况下,我们需要为用户提供一种直观且易于操作的界面,以便他们与设备进行交互。

其中,多级菜单是一种常见的交互方式。

本文将介绍在OL ED显示屏上实现多级菜单的方法。

一、概述多级菜单是一种具有层级结构的菜单,它允许用户在不同层级间进行导航和选择操作。

通过使用O LE D显示屏,我们可以以图形化的方式展示多级菜单,使用户操作更加方便和直观。

二、实现步骤1.准备工作在开始实现多级菜单之前,我们需要准备以下材料:-一块可驱动OL ED显示屏的硬件设备-相应的开发板或单片机-适配器或连接线等连接硬件设备所需的配件2.设计菜单结构在实现多级菜单之前,我们需要先设计菜单的层级结构。

通常,多级菜单由一级菜单和多个子菜单组成。

一级菜单可以包含多个子菜单,子菜单之间可以进行跳转和切换。

我们可以用树状结构来表示并管理菜单的层级关系。

3.显示菜单通过OL ED显示屏,我们可以将菜单以图形化的方式展示出来,提供给用户进行选择。

在显示菜单时,我们需要根据当前菜单层级和用户选择的位置来进行显示,以及在用户进行操作时进行相应的响应。

4.用户操作多级菜单的核心在于用户的操作。

用户可以使用特定的按键或触摸屏进行导航和选择。

我们需要监听用户的操作,并对其进行相应的处理。

比如,当用户选择某个菜单项时,我们需要根据其选择进行相应的跳转或执行相应的操作。

5.实现菜单功能菜单不仅仅是显示和选择,还需要实现相应的功能。

根据不同的应用场景,我们可以为菜单的不同选项分配不同的功能,并在用户选择时执行相应的操作。

6.菜单管理和维护在实际应用中,菜单通常需要进行管理和维护。

这包括对菜单项的增加、删除和修改,以及对菜单结构的调整和优化。

我们需要提供相应的管理界面和功能,以便管理员或用户对菜单进行维护和配置。

添加右键快捷菜单VBA实例教程

添加右键快捷菜单VBA实例教程

添加右键快捷菜单VBA实例教程除非注明,文章均为战战如疯原创,转载请保留链接: cat4/565.html,VBA交流群273624828。

在设计自己的Excel分析工具时经常要用到右键快捷菜单,这节就来看下怎样自定义一个右键菜单。

首先要说明的是自定义菜单的影响是系统性的,也就是说如果你在一个Excel工作簿中运行程序添加了一个自定义命令,那当你打开其他工作簿时该自定义菜单命令仍然存在,所以如果你只想这个自定义菜单仅在该工作簿或仅是临时起作用,那就需要做一些设置。

先给出代码,再对代码做简单解释Sub 自定义右键()Dim mycontrol, mycontrol2On Error Resume NextCommandBars('cell').Reset'CommandBars('cell').Controls('我的命令').Delete'CommandBars('cell').Controls('我的命令2').DeleteSet mycontrol =CommandBars('cell').Controls.Add(before:=1, temporary:=True)With mycontrol.Caption = '我的命令'.FaceId = 199 '显示的图标.Style = msoButtonIconAndCaption '图标和文字的显示.OnAction = 'ABC' '指定要运行的宏End WithSet mycontrol2 =CommandBars('cell').Controls.Add(before:=1, temporary:=True)With mycontrol2.Caption = '我的命令2'.FaceId = 199 '显示的图标.Style = msoButtonIconAndCaption '图标和文字的显示.OnAction = 'ABC2' '指定要运行的宏End WithCommandBars('cell').Controls('剪切(&T)').BeginGroup = TrueEnd Sub先看添加按钮的命令Set mycontrol = CommandBars('cell').Controls.Add(before:=1, temporary:=True),CommandBars('cell')就是指的右键菜单,controls是指菜单上的按钮,add方法就是添加一个新的按钮,几个属性before是新按钮放置的位置,这里1就是指放在第1个之前了,也就是放在第1位了,temporary顾名思义,临时,指明该按钮是不是临时起作用,true则代表该按钮只在这次打开Excel中起作用(注意是这次打开的所有Excel,而不仅仅是当前的Excel工作簿),当你将所有Excel窗口都关闭了,再次打开该按钮则不会继续存在了。

Authorware6完全教程 制作右键菜单

Authorware6完全教程 制作右键菜单

Authorware6完全教程 制作右键菜单在Authorware中利用菜单交互很容易制作一个标准的Windows风格的菜单,但在Authorware中却没有提供制作右键菜单的简单方法,.而是在随Authorware安装的UCD文件tMsControls.u32中提供了此种功能。

下面利用tMsControls.u32中的函数来建立一个右键菜单:1.新建一个文件,文件名为tMsControls _Demo.a6p,打开文件属性设置对话框,根据屏幕大小设置程序窗口大小;2.打开函数窗口,引入tMsControls.u32文件中的函数;3.引入一个显示图标到流程线上,命名为“显示结果”,双击打开该显示图标的展示窗口,导入一幅底图,并用文字输入工具输入以下两段文字:鼠标位置:{CursorX}、{CursorY}选择:{Res1}其中Res1是自定义变量。

然后再按快捷键Ctrl+I打开该显示图标的属性对话框,进行如图15.12所示的设置。

4.拖入一个计算图标到流程线上,命名为“设置右键菜单内容”,双击打开该计算图标的输入窗口,输入以下内容:--取得窗口句柄popHandle:=tMsCreatePopupList(WindowHandle)--设置菜单内容Res:=tMsAddItem(popHandle, 1,0,"新建")Res:=tMsAddItem(popHandle, 1,1,"文件夹")Res:=tMsAddItem(popHandle, 1,2,"文本文件")Res:=tMsAddItem(popHandle, 2,0,"-")Res:=tMsAddItem(popHandle, 3,0,"刷新")Res:=tMsAddItem(popHandle, 4,0,"-")Res:=tMsAddItem(popHandle, 5,0,"退出")5.拖入一个交互图标到流程线上,命名为“显示右键菜单”,.再拖入一个计算图标到该交互图标的右边,在弹出的对话框中选择Conditional响应方式,双击打开该响应图标的属性设置对话框,按照图5所示进行设置。

MFC创建右键弹出菜单的方法

MFC创建右键弹出菜单的方法

MFC创建右键弹出菜单的⽅法本⽂实例讲述了MFC创建右键弹出菜单的⽅法。

分享给⼤家供⼤家参考。

具体实现⽅法如下:①、添加⼀个菜单资源,ID为IDM_RIGHTMENU。

因为在显⽰右键菜单时顶级菜单是不显⽰的,所以可以给它设置任意⽂本。

②、给视类添加WM_RBUTTONDOWN消息,在该消息中处理右键弹出菜单。

因为视类窗⼝始终覆盖在框架窗⼝之上,框架窗⼝接收不到⿏标消息,所以由视类捕获WM_RBUTTONDOWN消息。

复制代码代码如下:void CMenuView::OnRButtonDown(UINT nFlags, CPoint point){// TODO: 在此添加消息处理程序代码和/或调⽤默认值CMenu menu;menu.LoadMenuW(IDM_RIGHTMENU);//加载菜单资源CMenu *pPopup=menu.GetSubMenu(0);ClientToScreen(&point);//将客户区坐标转换为屏幕坐标//显⽰右键菜单,由视类窗⼝拥有。

pPopup->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,point.x,point.y,this);//TrackPopupMenu的最后⼀个参数,可以为GetParent让⽗窗⼝既框架窗⼝拥有右键菜单,这样//框架类窗⼝获得了对右键菜单中菜单项的命令响应,CView::OnRButtonDown(nFlags, point);}③、为右键菜单项添加命令消息响应函数(略)。

希望本⽂所述对⼤家的基于MFC的VC++程序设计有所帮助。

JPopupMenu右键菜单

JPopupMenu右键菜单

1.初始化要添加右键菜单的控件和右键菜单以及右键菜单下的项private JList fileList = new JList(listModel);private JPopupMenu popupMenu = new JPopupMenu();private JMenuItem menuItem1 = new JMenuItem("移除");private JMenuItem menuItem2 = new JMenuItem("添加");2.将菜单项添加进菜单中popupMenu.add(menuItem1);popupMenu.add(menuItem2);3.给菜单和菜单项添加鼠标和单击事件该类实现接口ActionListener, MouseListenerfileList.addMouseListener(this);menuItem.addActionListener(this);4.该类实现接口中的方法public void mouseClicked(MouseEvent e) {}public void mousePressed(MouseEvent e) {selectIndex = fileList.locationToIndex(e.getPoint());// 获取鼠标点击的项fileList.setSelectedIndex(selectIndex);maybeShowPopup(e);}public void mouseReleased(MouseEvent e) {maybeShowPopup(e);}// 弹出右键菜单菜单private void maybeShowPopup(MouseEvent e) {if (e.isPopupTrigger() && fileList.getSelectedIndex() != -1) {// 获取选择项的值Object selected = fileList.getModel().getElementAt(fileList.getSelectedIndex());selectItem = selected;System.out.println(selected);popupMenu.show(e.getComponent(), e.getX(), e.getY());}}public void mouseEntered(MouseEvent e) {}public void mouseExited(MouseEvent e) {}// 如果选择了移除else if (obj == menuItem1) {listModel.removeElement(selectItem);fileS.remove(new File(selectItem.toString()));}。

添加右键快捷菜单

添加右键快捷菜单

1.添加右键快捷菜单(以MainWindow的右键菜单为例)①使窗体能使用自定义快捷菜单this->setContextMenuPolicy(Qt::CustomContextMenu);②创建快捷菜单创建方法一(简单):menuContext = new QMenu(this);menuContext->addAction("test", this, SLOT(testslot()));创建方法二(详细):menuContext = new QMenu();QAction *act = new QAction(menuContext);act->setText("test");connect(act, SIGNAL(triggered()), this, SLOT(testslot()));④连接右键信号和槽connect(this,SIGNAL(customContextMenuRequested(QPoint)),this,SLOT(menuRequested(QPoi nt)));⑤响应右键信号,弹出右键菜单void MainWindow::menuRequested(QPoint pos){menu->exec(QCursor::pos());}③响应菜单命令,最终的操作是在这里进行,比如编辑列表等。

void MainWindow::testslot(){QMessageBox::warning(this, "msg", "hello");}2.打开文件对话框QString_fileName=QFileDialog::getOpenFileName(this,tr(""),QDir::currentPath(),tr("*.xm l"));if(_fileName.isNull()){return;}fileName=_fileName;3.创建对话框QMessageBox mb;mb.setText(tr("是否保存已修改的xml文件!"));mb.setStandardButtons(QMessageBox::Yes|QMessageBox::No);if(mb.exec()==QMessageBox::Yes){QFile file(fileName);saveFile(&file); }。

Win10使用RightMenuMgr管理右键菜单的方法

Win10使用RightMenuMgr管理右键菜单的方法

Win10使用RightMenuMgr管理右键菜单的方法
导读:Win10如何使用RightMenuMgr来管理右键菜单?Windows右键菜单是一种很方便快捷的操作入口,通常情况下,我们会将常用的选项添加在右键菜单中,时间久了之后,右键菜单就变得臃肿了,所以我要适时的清理右键菜单,这里给大家推荐一款右键菜单管理工具--RightMenuMgr,通过它我们可以很方便的管理右键菜单。

RightMenuMgr简介:
RightMenuMgr中文名为《右键扩展菜单管理器》,是国人开发的一款绿色小巧免费的右键菜单管理工具,简体中文界面,很方便操作。

使用RightMenuMgr清理右键菜单选项:
1、RightMenuMgr窗口的左侧窗格列出了IE浏览器和Explorer文件资源管理器两大项目,展开Explorer又可以看到更多的项目,选中某个项目,就会在右键窗格中显示该项目的右键菜单选项。

如图:
2、如果想要删除某个右键菜单选项,只需取消勾选该选项即可。

使用RightMenuMgr锁定右键菜单:
1、如果不想某个项目的右键菜单中再被添加选项,例如不想在右键菜单的“打开方式”中再被添加新选项,可以右键点击“打开方式”,选择“锁定扩展菜单”。

如图:
2、这样再安装应用程序时,“打开方式”中也不会被添加新选项了。

RightMenuMgr下载地址:百度网盘
以上就是Win10使用RightMenuMgr管理右键菜单的方法,不会使用RightMenuMgr工具的伙伴,可以参看上文介绍。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

主题: 【Menu】右键菜单功能实现
右键菜单的基础实现
Menu的popContainer属性是用以指定支持右键菜单的容器。

如果我们需要在某个控件(例如:button,id为buttonOpertion)使用右键菜单,则我们就可以设置popupContainer属性为buttonOpertion,这样就可以实现右键菜单功能。

同时popupContainer的属性配置也可以支持多个控件id,如果需要在多个控件实现右键菜单的功能,假设我们需要在button及datatable(id为datatable1 )上同时实现右键菜单功能,将Menu中的popupContainer 属性设置为buttonOpertion,datatable1即可实现多个控件实现右键菜单的功能。

Menu中popupContainer属性的对象,即可以是dorado中的tree,datatable,button,dataLabel等可视化对象,也可以是HTML中的标签对象,如<p>,<div>等类型的对象,一言以蔽之,只要将其id加入到popupContainer中即可。

前台生成右键菜单
在前台可以通过DoradoFactory来生成右键菜单,例如:
根据Tree的当前节点弹出不同的菜单
对于Tree,Dorado还可以实现不同节点弹出不同右键菜单的功能,实现思路是在DataTree 控件的onActive 事件中写js代码,首先拦截掉整个Tree的右键单击事件,然后找到我们单击的节点,通过Dorado提供的Menu.show()方法实现根据树的当前节点,决定弹出不同的菜单的功能,具体参看如下代码:。

相关文档
最新文档