LabwindowsCVI鼠标右键实现菜单功能

合集下载

VC+++在ListView中添加右键菜单

VC+++在ListView中添加右键菜单

使用弹出式菜单(PopMenu)弹出式菜单(PopMenu)大家都熟悉,在WIN98的桌面上单击鼠标右键弹出的菜单就是弹出式菜单。

通常情况下,弹出式菜单在鼠标右键单击时弹出,当然,也能够根据需要随时弹出。

在VC++5的MFC中,管理菜单的类叫CMenu。

下面我向大家介绍建立一个弹出式菜单的基本方法。

一、在资源编辑器中建立一个菜单资源新建一个菜单资源,比如把菜单的ID号为IDC_POPMENU。

此菜单有一项两层,即有一个可弹出的菜单项,而此菜单项的弹出内容即为将要建立的弹出式菜单的内容。

至于每一个菜单项的消息映射,和一般的菜单相同。

二、使用CMenu类对象CMenu类的成员函数较多,但建立弹出式菜单只需用到其中几个成员函数。

1、LoadMenu函数功能:从应用程式的可执行文档中加载菜单资源原型:BOOL LoadMenu( UINT nIDResource );其中nIDResource是菜单资源的ID号,这里用的是刚建立的IDC_POPMENU。

2、GetSubMenu函数功能:此函数用于得到子菜单的指针。

原型:CMenu* GetSubMenu( int nPos ) const;nPos为层数,0为第一层子菜单……以此类推。

由于我们需要的是“可弹出项”的第一层子菜单,因此用GetSubMenu(0)来得到第一层子菜单的类指针。

3、TrackPopupMenu函数功能:在指定位置显示弹出菜单,并跟踪所选择的项原型:BOOL TrackPopupMenu( UINT nFlags,int x,int y,CWnd* pWnd,LPCRECT lpRect = NULL );其中:nFlags为屏幕坐标属性和鼠标坐标属性屏幕坐标属性:TPM_CENTERALIGN 横向将菜单以x居中TPM_LEFTALIGN 横向将菜单以x左对齐TPM_RIGHTALIGN 横向将菜单以x右对齐鼠标按键属性(只在响应WM_CONTEXTMENU消息时有效):TPM_LEFTBUTTON 连续按? 右键不会连续弹出菜单,鼠标右键不可用于选定菜单项TPM_RIGHTBUTTON 连续按鼠标右键会连续弹出菜单,鼠标右键可用于选定菜单项x,y均为屏幕坐标lpRect 菜单所占的区域。

在winform界面实现右键菜单功能

在winform界面实现右键菜单功能

在winform界⾯实现右键菜单功能没接触之前,感觉模式⽐较困难,其实不然,其实只有短短的⼏部就可以实现呢!⼀、⾸先在页⾯新建contextMenuStrip 菜单项,然后再菜单⾥⾯添加你想要操作的步骤;⼆、就是补⾜⿏标右键事件;protected override void OnMouseUp(MouseEventArgs e){base.OnMouseUp(e);if (e.Button == MouseButtons.Right){contextMenuStrip.Show(this,e.Location);}}这样简单的⼏步就实现呢!当然这是简单的菜单项,如果想让你的菜单更加丰满炫丽,就要为菜单项添加样式呢!这⾥我也将某个菜单的样式代码附上,供⼤家参考!public class ToolStripRendererEx : ToolStripRenderer{private CaptureImageToolColorTable _colorTable;private static readonly int OffsetMargin = 24;private const string MenuLogoString = "";public ToolStripRendererEx() : base(){}public ToolStripRendererEx(CaptureImageToolColorTable colorTable): base(){_colorTable = colorTable;}protected virtual CaptureImageToolColorTable ColorTable{get{if (_colorTable == null){_colorTable = new CaptureImageToolColorTable();}return _colorTable;}}protected override void OnRenderToolStripBackground(ToolStripRenderEventArgs e){Color baseColor = ColorTable.BackColorNormal;ToolStrip toolStrip = e.ToolStrip;Graphics g = e.Graphics;g.SmoothingMode = SmoothingMode.AntiAlias;if (toolStrip is ToolStripDropDown){RegionHelper.CreateRegion(e.ToolStrip, e.AffectedBounds);Rectangle rect = e.AffectedBounds;using (GraphicsPath path = GraphicsPathHelper.CreatePath(rect, 8, RoundStyle.All, false)){using (SolidBrush brush = new SolidBrush(ColorTable.BackColorNormal)){g.FillPath(brush, path);}using (Pen pen = new Pen(ColorTable.BorderColor)){g.DrawPath(pen, path);using (GraphicsPath innerPath = GraphicsPathHelper.CreatePath(rect, 8, RoundStyle.All, true)){g.DrawPath(pen, innerPath);}}}}else{LinearGradientMode mode =e.ToolStrip.Orientation == Orientation.Horizontal ?LinearGradientMode.Vertical : LinearGradientMode.Horizontal;RenderBackgroundInternal(g,e.AffectedBounds,ColorTable.BackColorHover,ColorTable.BorderColor,ColorTable.BackColorNormal,RoundStyle.All,false,true,mode);}}protected override void OnRenderButtonBackground(ToolStripItemRenderEventArgs e){ToolStripButton item = e.Item as ToolStripButton;if (item != null){LinearGradientMode mode =e.ToolStrip.Orientation == Orientation.Horizontal ?LinearGradientMode.Vertical : LinearGradientMode.Horizontal;Graphics g = e.Graphics;g.SmoothingMode = SmoothingMode.AntiAlias;Rectangle bounds = new Rectangle(Point.Empty, item.Size);if (item.BackgroundImage != null){Rectangle clipRect = item.Selected ? item.ContentRectangle : bounds; ControlPaintEx.DrawBackgroundImage(g,item.BackgroundImage,ColorTable.BackColorNormal,item.BackgroundImageLayout,bounds,clipRect);}if (item.CheckState == CheckState.Unchecked){if (item.Selected){Color color = ColorTable.BackColorHover;if (item.Pressed){color = ColorTable.BackColorPressed;}RenderBackgroundInternal(g,bounds,color,ColorTable.BorderColor,ColorTable.BackColorNormal,RoundStyle.All,true,true,mode);return;}else{if (e.ToolStrip is ToolStripOverflow){using (Brush brush = new SolidBrush(ColorTable.BackColorNormal)) {g.FillRectangle(brush, bounds);}return;}}}else{Color color = ControlPaint.Light(ColorTable.BackColorHover);if (item.Selected){color = ColorTable.BackColorHover;}if (item.Pressed){color = ColorTable.BackColorPressed;}RenderBackgroundInternal(e.Graphics,bounds,color,ColorTable.BorderColor,ColorTable.BackColorNormal,RoundStyle.All,true,true,mode);return;}}base.OnRenderButtonBackground(e);}protected override void OnRenderSeparator(ToolStripSeparatorRenderEventArgs e){Rectangle rect = e.Item.ContentRectangle;if (e.ToolStrip is ToolStripDropDown){if (e.Item.RightToLeft == RightToLeft.Yes){//rect.X -= OffsetMargin + 4;}else{rect.X += OffsetMargin + 4;}rect.Width -= OffsetMargin + 8;}RenderSeparatorLine(e.Graphics,rect,ColorTable.BackColorPressed,ColorTable.BackColorNormal,SystemColors.ControlLightLight,e.Vertical);}protected override void OnRenderMenuItemBackground(ToolStripItemRenderEventArgs e){if (!e.Item.Enabled){return;}Graphics g = e.Graphics;Rectangle rect = new Rectangle(Point.Empty, e.Item.Size);g.SmoothingMode = SmoothingMode.AntiAlias;if (e.Item.RightToLeft == RightToLeft.Yes){rect.X += 4;}else{rect.X += OffsetMargin + 4;}rect.Width -= OffsetMargin + 8;rect.Height--;if (e.Item.Selected){RenderBackgroundInternal(g,rect,ColorTable.BackColorHover,ColorTable.BorderColor,ColorTable.BackColorNormal,RoundStyle.All,true,true,LinearGradientMode.Vertical);}else{base.OnRenderMenuItemBackground(e);}}protected override void OnRenderImageMargin(ToolStripRenderEventArgs e){if (e.ToolStrip is ToolStripDropDownMenu){Rectangle rect = e.AffectedBounds;Graphics g = e.Graphics;rect.Width = OffsetMargin;if (e.ToolStrip.RightToLeft == RightToLeft.Yes){rect.X -= 2;}else{rect.X += 2;}rect.Y += 1;rect.Height -= 2;g.SmoothingMode = SmoothingMode.AntiAlias;using (LinearGradientBrush brush = new LinearGradientBrush(rect,ColorTable.BackColorHover,Color.White,90f)){Blend blend = new Blend();blend.Positions = new float[] { 0f, .2f, 1f };blend.Factors = new float[] { 0f, 0.1f, .9f };brush.Blend = blend;rect.Y += 1;rect.Height -= 2;using (GraphicsPath path =GraphicsPathHelper.CreatePath(rect, 8, RoundStyle.All, false)) {g.FillPath(brush, path);}}g.TextRenderingHint = TextRenderingHint.AntiAlias;StringFormat sf = new StringFormat(StringFormatFlags.NoWrap);Font font = new Font(e.ToolStrip.Font.FontFamily, 11, FontStyle.Bold);sf.Alignment = StringAlignment.Near;sf.LineAlignment = StringAlignment.Center;sf.Trimming = StringTrimming.EllipsisCharacter;g.TranslateTransform(rect.X, rect.Bottom);g.RotateTransform(270f);if (!string.IsNullOrEmpty(MenuLogoString)){Rectangle newRect = new Rectangle(rect.X, rect.Y, rect.Height, rect.Width);using (Brush brush = new SolidBrush(ColorTable.ForeColor)){g.DrawString(MenuLogoString,font,brush,newRect,sf);}}g.ResetTransform();return;}base.OnRenderImageMargin(e);}protected override void OnRenderItemImage(ToolStripItemImageRenderEventArgs e){Graphics g = e.Graphics;g.InterpolationMode = InterpolationMode.HighQualityBilinear;if (e.Item is ToolStripMenuItem){ToolStripMenuItem item = (ToolStripMenuItem)e.Item;if (item.Checked){return;}Rectangle rect = e.ImageRectangle;if (e.Item.RightToLeft == RightToLeft.Yes){rect.X -= OffsetMargin + 2;}else{rect.X += OffsetMargin + 2;}ToolStripItemImageRenderEventArgs ne =new ToolStripItemImageRenderEventArgs(e.Graphics, e.Item, e.Image, rect);base.OnRenderItemImage(ne);return;}base.OnRenderItemImage(e);}protected override void OnRenderItemText(ToolStripItemTextRenderEventArgs e){e.TextColor = ColorTable.ForeColor;if (!(e.ToolStrip is MenuStrip) && (e.Item is ToolStripMenuItem)) {Rectangle rect = e.TextRectangle;if (e.Item.RightToLeft == RightToLeft.Yes){rect.X -= 16;}else{rect.X += 16;}e.TextRectangle = rect;}base.OnRenderItemText(e);}internal void RenderBackgroundInternal(Graphics g,Rectangle rect,Color baseColor,Color borderColor,Color innerBorderColor,RoundStyle style,bool drawBorder,bool drawGlass,LinearGradientMode mode){RenderBackgroundInternal(g,rect,baseColor,borderColor,innerBorderColor,style,8,drawBorder,drawGlass,mode);}internal void RenderBackgroundInternal(Graphics g,Rectangle rect,Color baseColor,Color borderColor,Color innerBorderColor,RoundStyle style,int roundWidth,bool drawBorder,bool drawGlass,LinearGradientMode mode){RenderBackgroundInternal(g,rect,baseColor,borderColor,innerBorderColor,style,8,0.45f,drawBorder,drawGlass,mode);}internal void RenderBackgroundInternal(Graphics g,Rectangle rect,Color baseColor,Color borderColor,Color innerBorderColor,RoundStyle style,int roundWidth,float basePosition,bool drawBorder,bool drawGlass,LinearGradientMode mode){if (drawBorder){rect.Width--;rect.Height--;}using (LinearGradientBrush brush = new LinearGradientBrush(rect, Color.Transparent, Color.Transparent, mode)){Color[] colors = new Color[4];colors[0] = GetColor(baseColor, 0, 35, 24, 9);colors[1] = GetColor(baseColor, 0, 13, 8, 3);colors[2] = baseColor;colors[3] = GetColor(baseColor, 0, 68, 69, 54);ColorBlend blend = new ColorBlend();blend.Positions = new float[] { 0.0f, basePosition, basePosition + 0.05f, 1.0f }; blend.Colors = colors;brush.InterpolationColors = blend;if (style != RoundStyle.None){using (GraphicsPath path =GraphicsPathHelper.CreatePath(rect, roundWidth, style, false)){g.FillPath(brush, path);}if (baseColor.A > 80){Rectangle rectTop = rect;if (mode == LinearGradientMode.Vertical){rectTop.Height = (int)(rectTop.Height * basePosition);}else{rectTop.Width = (int)(rect.Width * basePosition);}using (GraphicsPath pathTop = GraphicsPathHelper.CreatePath(rectTop, roundWidth, RoundStyle.Top, false)){using (SolidBrush brushAlpha =new SolidBrush(Color.FromArgb(80, 255, 255, 255))){g.FillPath(brushAlpha, pathTop);}}}if (drawGlass){RectangleF glassRect = rect;if (mode == LinearGradientMode.Vertical){glassRect.Y = rect.Y + rect.Height * basePosition;glassRect.Height = (rect.Height - rect.Height * basePosition) * 2; }else{glassRect.X = rect.X + rect.Width * basePosition;glassRect.Width = (rect.Width - rect.Width * basePosition) * 2; }ControlPaintEx.DrawGlass(g, glassRect, 170, 0);}if (drawBorder){using (GraphicsPath path =GraphicsPathHelper.CreatePath(rect, roundWidth, style, false)) {using (Pen pen = new Pen(borderColor)){g.DrawPath(pen, path);}}rect.Inflate(-1, -1);using (GraphicsPath path =GraphicsPathHelper.CreatePath(rect, roundWidth, style, false)) {using (Pen pen = new Pen(innerBorderColor)){g.DrawPath(pen, path);}}}}else{g.FillRectangle(brush, rect);if (baseColor.A > 80){Rectangle rectTop = rect;if (mode == LinearGradientMode.Vertical){rectTop.Height = (int)(rectTop.Height * basePosition);}else{rectTop.Width = (int)(rect.Width * basePosition);}using (SolidBrush brushAlpha =new SolidBrush(Color.FromArgb(80, 255, 255, 255))){g.FillRectangle(brushAlpha, rectTop);}}if (drawGlass){RectangleF glassRect = rect;if (mode == LinearGradientMode.Vertical){glassRect.Y = rect.Y + rect.Height * basePosition;glassRect.Height = (rect.Height - rect.Height * basePosition) * 2; }else{glassRect.X = rect.X + rect.Width * basePosition;glassRect.Width = (rect.Width - rect.Width * basePosition) * 2; }ControlPaintEx.DrawGlass(g, glassRect, 200, 0);}if (drawBorder){using (Pen pen = new Pen(borderColor)){g.DrawRectangle(pen, rect);}rect.Inflate(-1, -1);using (Pen pen = new Pen(innerBorderColor)){g.DrawRectangle(pen, rect);}}}}}internal void RenderSeparatorLine(Graphics g,Rectangle rect,Color baseColor,Color backColor,Color shadowColor,bool vertical){float angle;if (vertical){angle = 90F;}else{angle = 180F;}using (LinearGradientBrush brush = new LinearGradientBrush(rect,baseColor,backColor,angle)){Blend blend = new Blend();blend.Positions = new float[] { 0f, .3f, .5f, .7f, 1f };blend.Factors = new float[] { 1f, .3f, 0f, .3f, 1f };brush.Blend = blend;using (Pen pen = new Pen(brush)){if (vertical){g.DrawLine(pen, rect.X, rect.Y, rect.X, rect.Bottom);}else{g.DrawLine(pen, rect.X, rect.Y, rect.Right, rect.Y);}brush.LinearColors = new Color[] {shadowColor, backColor };pen.Brush = brush;if (vertical){g.DrawLine(pen, rect.X + 1, rect.Y, rect.X + 1, rect.Bottom);}else{g.DrawLine(pen, rect.X, rect.Y + 1, rect.Right, rect.Y + 1);}}}}private Color GetColor(Color colorBase, int a, int r, int g, int b){int a0 = colorBase.A;int r0 = colorBase.R;int g0 = colorBase.G;int b0 = colorBase.B;if (a + a0 > 255) { a = 255; } else { a = Math.Max(0, a + a0); }if (r + r0 > 255) { r = 255; } else { r = Math.Max(0, r + r0); }if (g + g0 > 255) { g = 255; } else { g = Math.Max(0, g + g0); }if (b + b0 > 255) { b = 255; } else { b = Math.Max(0, b + b0); }return Color.FromArgb(a, r, g, b);}}public class CaptureImageToolColorTable{private static readonly Color _borderColor = Color.FromArgb(65, 173, 236);private static readonly Color _backColorNormal = Color.FromArgb(229, 243, 251);private static readonly Color _backColorHover = Color.FromArgb(65, 173, 236);private static readonly Color _backColorPressed = Color.FromArgb(24, 142, 206);private static readonly Color _foreColor = Color.FromArgb(12, 83, 124);public CaptureImageToolColorTable() { }public virtual Color BorderColor{get { return _borderColor; }}public virtual Color BackColorNormal {get { return _backColorNormal; } }public virtual Color BackColorHover {get { return _backColorHover; }}public virtual Color BackColorPressed {get { return _backColorPressed; } }public virtual Color ForeColor{get { return _foreColor; }}}。

VC对话框添加右键菜单

VC对话框添加右键菜单

VC对话框添加右键菜单VC对话框添加右键菜单(2008-12-21 10:15:24)标签:it 分类:VC++学习实例及资料VC对话框添加右键菜单2006-12-05 22:34一.在资源创建对话框中选择Menu项并单击New按钮自动创建ID为IDR_MENU1的菜单,为该菜单添加一个菜单项File,并在File 菜单项下添加Cut,Copy和Paste三个菜单(为这三个菜单添加消息响应代码)如:void CExampleDlg::OnCut(){AfxMessageBox("Cut"); //弹出对话框}void CExampleDlg::OnCopy(){AfxMessageBox("Copy"); //弹出对话框}void CExampleDlg::OnPaste(){AfxMessageBox("Paste"); //弹出对话框}二.当在窗口内右击时,窗口将接收到WM_CONTEXTMENU消息,在该消息的处理函数中装载右键菜单,并调用CMenu::TrackPopupMenu函数便可显示右键菜单,添加对话框WM_CONTEXTMENU消息处理函数的响应代码如下:void CExampleDlg::OnContextMenu(CWnd* pWnd, CPoint point){CMenu menu;menu.LoadMenu(IDR_MENU1); //读取资源menu.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN| TPM_LEFTBUTTON|TPM_RIGHTBUTTON, point.x, point.y, this) //弹出自定义右键菜单}<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< <<<<<在mousemove中使用if(rect.PtInRect(point))MessageBox("hi");不起作用,即使鼠标落入有效区域。

C#-----Winform界面实现右键菜单功能

C#-----Winform界面实现右键菜单功能

C#-----Winform界⾯实现右键菜单功能1.新建Form窗体,向其中添加ContextMenuStrip控件2.点击ContextMenuStrip控件属性Items,添加MenuItem或Separator组件3.点击⼀级菜单,添加MenuItem或Separator组件,形成⼆级菜单4.Demo代码using System;using System.Collections.Generic;using ponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Forms;namespace Contextmenu{public partial class frmContextmenu : Form{public frmContextmenu(){InitializeComponent();}private void tSMICenter_Click(object sender, EventArgs e){int height =SystemInformation.WorkingArea.Height;int width = SystemInformation.WorkingArea.Width;int formheight = this.Size.Height;int formwidth = this.Size.Width;int newformx = width / 2 - formwidth / 2;int newformy = height / 2 - formheight / 2;this.SetDesktopLocation(newformx, newformy);}private void tSMILargen_Click(object sender, EventArgs e){this.Width =this.Width+100;this.Height = this.Height + 100;}private void tSMISmaller_Click(object sender, EventArgs e){this.Width = this.Width - 100;this.Height = this.Height- 100;}private void frmContextmenu_MouseClick(object sender, MouseEventArgs e){if (e.Button==MouseButtons.Right){contextMenuStrip.Show(MousePosition.X,MousePosition.Y);}}}}namespace Contextmenu{partial class frmContextmenu{///<summary>///必需的设计器变量。

win8系统怎么给鼠标右键添加菜单功能

win8系统怎么给鼠标右键添加菜单功能

win8系统怎么给鼠标右键添加菜单功能
电脑平常操作中会通过鼠标右键菜单中的选项刷新、新建记事本、编辑图片或截图等等功能,在安装第三方软件时也是在鼠标“右键菜单”中新增功能,但有些功能需要用户自己去添加到菜单中才可以使用,那么你知道win8系统怎么给鼠标右键添加菜单功能吗?下面是店铺整理的一些关于win8系统给鼠标右键添加菜单功能的相关资料,供你参考。

win8系统给鼠标右键添加菜单功能的方法:
1、以Win8平台作为例子,把鼠标移动到屏幕的右下方,然后就直接打开Charm超级菜单,搜索并打开“运行”选项;
2、在运行命令框里面直接输入regedit字符,然后就手动打开注册表编辑器;
3、依次定位到HKEY_CLASSES_ROOTDirectoryBackgroundshell,在shell下面直接新建“项。

4、接着在上面的项目里面继续新建子“项”:command,双击这个键值,在里面手动输入QQ、截图以及记事本等各个应用程序的系统路径;
上面所有的操作都完整之后,就已经成功的给ghost win7、Win8.1右键菜单添加了QQ、记事本、截图工具以及滑动关机等多个功能,如下:
win8系统给鼠标右键添加菜单功能的。

LabCVI常见问题及解决方法

LabCVI常见问题及解决方法

LabCVI常见问题及解决方法1.使用CVI9.0调用由VC++6.0编写的DLL,该DLL在VC中调用是可以的,输出方式也是C语言的。

但是在CVI中调用该DLL时,总是提示missing prototype,如何解决?答:设置BUILD OPTION在options->Build optionsc language options中取消Require function prototypes的检测2.CVI中如何向设计好的word表格中添加文字和数据?答:先在表格中需要添加文字和数据的地方做一个“书签”,在CVI中打开该文档后,使用Word_GetProperty (currSelHandle, NULL, Word_SelectionBookmarks, CAVT_OBJHANDLE, &rangeHandle);获得“书签”信息,然后再向该“书签”处添加文字。

3.CVI中如何将波形图控件的图片放到剪贴板中?答:首先使用GetCtrlDisplayBitmap (panel, FORCEPANEL_GRAPH, 1, &bitmap);获得波形图控件的图片,然后使用ClipboardPutBitmap (bitmap);将图片放入到剪贴板中。

4.CVI中是否支持指向函数的指针,如何实现?答:可以实现,如下例:int(*pmax)(int a, int b);int x,y,z;pmax=max;printf("input two numbers:\n");scanf("%d%d",&x,&y);z=(*pmax)(x,y);5.CVI中如何使用非NI公司的硬件产品?该公司提供了一个fp文件。

答:一般来说通常可以调用产品销售商提供的动态链接库,有些大公司也提供fp文件,该文件可以直接使用,就可以达到使用硬件的目的了。

在使用前,可以直接将该文件添加入项目中,也可以在Library中定制fp文件的加载。

【LabVIEW】菜单使用汇总

【LabVIEW】菜单使用汇总
三、禁用前面板控件默认右键菜单
( 1)指定控件禁用
在前面板控件上面,右键--高级--运行时快捷菜单--禁用。
( 2)全部控件禁用
文件——VI属性——窗口外观——自定义——去掉框图界面中添加事件结构分支标签上右键添加事件分支本vi菜单选择用户
【 LabVIEW】菜单使用汇总 一、运行时菜单
1、编辑--->运行时菜单,编辑好菜单结构。
二、自定义右键快捷菜单
( 1)实现自定义菜单
( 2)自定义菜单禁用某项
设置菜单项信息里,已启用设置为F。 注意:主菜单和子菜单的项标识符如果同名的话,主菜单就被禁用了。

C++实现添加桌面右键新建菜单

C++实现添加桌面右键新建菜单

C++实现添加桌⾯右键新建菜单对于程序员来说,新建⼀个cpp⽂件是再频繁不过的事情了。

为了⽅便,我们习惯在桌⾯右键新建⽂件,⽽不是新建⼀个⽂本⽂档,然后修改后缀名。

百度⾕歌查询了⼀下,终于知道如何添加注册表。

⼿痒,抽出时间⽤cpp写了⼀个程序,⽅便以后操作。

客户需求是永远⽆法满⾜的,经同学测试,陆续写了三个版本。

接下来直接贴代码~第⼀个版本,只能添加c、cpp、java三种后缀。

/** Author: Haipz* School: HDU* File Name: registry1.0.cpp*/#include <cstdio>#include <cmath>#include <ctime>#include <cctype>#include <cstring>#include <cstdlib>#include <climits>#include <cfloat>#include <iostream>#include <vector>#include <stack>#include <queue>#include <set>#include <map>#include <algorithm>using namespace std;char s[1024], buffer[128], result[1024*4];void work_1() {system("reg add \"HKEY_CLASSES_ROOT\\.c\\ShellNew\" /v \"NullFile\" /t REG_SZ");}void work_2() {system("reg add \"HKEY_CLASSES_ROOT\\.cpp\\ShellNew\" /v \"NullFile\" /t REG_SZ");}void work_3() {system("reg add \"HKEY_CLASSES_ROOT\\.java\\ShellNew\" /v \"NullFile\" /t REG_SZ");}int main() {printf("Add registry for C, C++ and Java\n");printf("Author: Haipz\nSchool: HDU\n");printf("1 for C;\n2 for C++;\n3 for Java.\n");printf("Example: 12 to add C and C++.\n");printf("Please make choice(s): ");gets(s);for (int i = 0; s[i] != '\0'; ++i) {printf("Working...\n");if (s[i] == '1') work_1();else if (s[i] == '2') work_2();else if (s[i] == '3') work_3();else printf("%c is a wrong enter!\n", s[i]);}system("pause");return 0;}第⼆个版本,精简了代码,⽀持添加⽤户输⼊的后缀。

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

LabwindowsCVI鼠标右键实现菜单功能
(1)在主界面下,新建一个界面,菜单Create中,选择Panel..,直接就生成一个新的面板,双击新建的面板,修改参数。

图1 右键菜单面板参数设置界面
如图1所示,设置界面的名称代码,Constant name 为PANEL_MENU,面板名称Panel title 为“右键菜单”。

(2)为该面板新建菜单,有两种方法,一种是通过软件的菜单Create中Menu Bar...菜单进行新建菜单,一种方法是右键点击PANEL_MENU面板界面的空白处,选择“Menu Bar...”新建菜单。

如图2所示。

按照图中进行设置你需要的菜单内容。

图2 菜单设置界面
(3)在程序启动后,在main函数中添加代码,获取菜单所在界面的句柄,不用该界面。

其代码如下:
int menupanelHandle; //初始化界面句柄
if ((menupanelHandle = LoadPanel (1, "NaI_IEC.uir",
PANEL_MENU)) < 0) //获取界面句柄
return -1;
(4)在主界面中,设置回调函数,设置方式见第1节讲解。

然后在回调函数中添加鼠标右键点击事件。

并在该事件中添加右键菜单源代码,如下:
int a; //初始化菜单句柄变量
case EVENT_RIGHT_CLICK: //右键点击事件
a = GetPanelMenuBar(menupanelHandle); //获得菜单句柄
RunPopupMenu(a,MOR_MENU_MENU,panelHandle,eventData
1,eventData2,0,0,0,0);//显示右键菜单
break;
(5)编译,完成右键菜单功能,如图3所示。

图3 菜单设置界面。

相关文档
最新文档