1、labwindowscvi 图形用户界面设计2/38图形用户界面设计1.图形用户界面(Graphical User Interface)面板(panel)菜单条(menu bar)控件(control)LabWindows/CVI自定义的资源格式2.面板设计其它资源的容器面板属性编辑器使用用户界面设计函数创建面板和改变面板属性11/14/20223/38面板(panel)11/14/20224/38面板编辑窗口11/14/20225/38面板操作函数:NewPanel创建面板nint NewPanel(int Parent_Panel_Handle,char Panel_Title,int P
2、anel_Top,int Panel_Left,int Panel_Height,int Panel_Width);ntestPanelHandle=NewPanel(0,新面板,10,10,200,300);LoadPanel载入面板nint LoadPanel(int Parent_Panel_Handle,char,int Panel_Resource_ID);ntestPanelHandle=LoadPanel(0,test.uir,PANEL_TEST);DisplayPanel显示面板nint DisplayPanel(int Panel_Handle);nDisplayPanel
3、(testPanelHandle);DiscardPanel释放面板nint DiscardPanel(int Panel_Handle)nDiscardPanel(testPanelHandle);11/14/20226/38HidePanel隐藏面板nint HidePanel(int Panel_Handle);nHidePanel(testPanelHandle);GetPanelAttribute获取面板属性nint GetPanelAttribute(int Panel_Handle,int Panel_Attribute,void*Attribute_Value);nGetPan
4、elAttribute(testPanelHandle,ATTR_BACKCOLOR,&color);SetPanelAttribute设置面板属性nint SetPanelAttribute(int Panel_Handle,int Panel_Attribute,.);nSetPanelAttribute(testPanelHandle,ATTR_BACKCOLOR,VAL_RED);SavePanelState保存面板状态RacallPanelState调出面板状态 11/14/20227/38弹出式面板(Pop-up Panel)11/14/20228/38弹出式面板(Pop-up P
5、anel)11/14/20229/38弹出式面板函数(Pop-up Panel)InstallPopup载入弹出式面板nint InstallPopup(int Panel_Handle);nInstallPopup(testPanelHandle);RemovePopup删除弹出式面板nint RemovePopup(int Remove_Popup);nRemovePopup(0);MessagePopup输出信息对话框nint MessagePopup(char Title,char Message);nMessagePopup(提示信息,测试结束,全部合格);ConfirmPopup等
6、待确认对话框 Yes or Nonint ConfirmPopup(char Title,char Message);nresponse=ConfirmPopup(测试信息,测量错误,是否继续?);PromptPopup等待输入字符信息对话框nint PromptPopup(char Title,char Message,char Response_Buffer,int Max_Response_Length);nPromptPopup(输入信息,请输入姓名,&name,20);11/14/202210/38nint (char Default_Directory,char Default_,
7、char,char Title,int Button_Label,int Restrict_Directory?,int Restrict_Extension?,int Allow_Cancel?,int Allow_Make_Directory?,char Path_Name);ni=(c:vxipnp,*.txt,*.*,选择数据文件,VAL_LOAD_BUTTON,0,0,1,0,);DirSelectPopupnint DirSelectPopup(char Default_Directory,char Title,int Allow_Cancel?,int Allow_Make_Di
8、rectory?,char Path_Name);ni=DirSelectPopup(c:vxipnp,Select Directory,1,1,&pathname);WaveformGraphPopupnint WaveformGraphPopup(char Title,void*Y_Array,int Number_of_Points,int Y_Data_Type,double Y_Gain,double Y_Offset,double Initial_X,double X_Increment);nWaveformGraphPopup(测量波形,testdata,1024,VAL_DOU
9、BLE,1.0,0.0,0.0,1.0);11/14/202211/383.菜单条设计简易菜单条和定制菜单条菜单制作和编辑器使用用户界面函数创建和编辑菜单11/14/202212/38菜单编辑窗口11/14/202213/38菜单操作函数:nLoadMenuBarint LoadMenuBar(int Destination_Panel_Handle,char,int Menu_Bar_Resource_ID);mainMenuHandle=LoadMenuBar(testPanelHandle,test.uir,MAIN_MENU);nDiscardMenuBarint DiscardMen
10、uBar(int Menu_Bar_Handle);DiscardMenuBar(mainMenuHandle);nNewMenuBarint NewMenuBar(int Destination_Panel_Handle);mainMenuHandle=NewMenuBar(testPanelHandle);nNewMenuint NewMenu(int Menu_Bar_Handle,char Menu_Name,int Before_Menu_ID);menuFileID=NewMenu(mainMenuHandle,文件,1);11/14/202214/38nNewMenuItemin
11、t NewMenuItem(int Menu_Bar_Handle,int Menu_ID,char Item_Name,int Before_Menu_Item_ID,int Short_Cut_Key,MenuCallbackPtr Event_Function,void*Event_Callback_Data);&menu=NewMenuItem(mainMenuHandle,menuFileID,打开.,1,0,0);nNewSubMenuint NewSubMenu(int Menu_Bar_Handle,int Menu_Item_ID);menu=NewSubMenu(mainM
12、enuHandle,menuFileID);nDiscardMenunDiscardSubMenunDiscardMenuItemn 11/14/202215/384.控件设计控件种类:n数值型(Numeric):数值控件,颜色选择控件,数值滑动条11/14/202216/38n文本型(Text):字符串控件,文本信息,文本框11/14/202217/38n命令按钮(Command Button):命令按钮,图片按钮n双态按钮(Toggle Button):双态按钮,文本/图形按钮,单选/复选控件11/14/202218/38n指示等(LED)n二值开关(Binary Switch)11/14
13、/202219/38n列表控件(Ring):下拉列表,滑动列表,图形列表11/14/202220/38n列表框(List Box)n装饰控件(Decoration)11/14/202221/38n图形控件(Graph):曲线图控件,带状图控件,数字图控件曲线图控件(Graph)11/14/202222/38带状图控件(Strip Chart)11/14/202223/38数字图控件(Digital Graph)11/14/202224/38n图片控件(Picture)11/14/202225/38n树形控件(Tree)11/14/202226/38n定时器控件(Timer)n画布控件(Canv
14、as)11/14/202227/38n表格控件(Table)11/14/202228/38n分隔控件(Splitter)11/14/202229/38n分页控件(Tab)11/14/202230/38n定制控件(Custom Control)11/14/202231/38通用控件操作函数:nGetCtrlValint GetCtrlVal(int Panel_Handle,int Control_ID,void*Value);GetCtrlVal(testPanelHandle,NUMERIC_VOL,&voltage);nSetCtrlValint SetCtrlVal(int Panel_
15、Handle,int Control_ID,.);SetCtrlVal(testPanelHandle,NUMERIC_VOL,5.0);nGetCtrlAttributeint GetCtrlAttribute(int Panel_Handle,int Control_ID,int Control_Attribute,void*Attribute_Value);GetCtrlAttribute(testPanelHandle,NUMERIC_VOL,ATTR_CTRL_VAL,&voltage);nSetCtrlAttributeint SetCtrlAttribute(int Panel_
16、Handle,int Control_ID,int Control_Attribute,.);SetCtrlAttribute(testPanelHandle,NUMERIC_VOL,ATTR_CTRL_VAL,5.0);11/14/202232/38特定控件操作函数:n列表控件函数n文本框控件函数n图形控件函数n定时器控件函数n表格控件函数n 5.用户界面管理:RunUserInterfacenint RunUserInterface(void);QuitUserInterfacenint QuitUserInterface(int Return_Code);nQuitUserInterfa
17、ce(0);11/14/202233/386.图形界面设计举例菜单的制作用Strip Chart显示一组随机数定时温度采集显示11/14/202234/38ActiveX控件ActiveX技术简介nActiveX技术是指宽松定义的、基于组件对象模型(COM)的技术集合。它是基于已经存在的OLE(对象链接与嵌入)技术,通过把桌面系统“对象共享”的范围扩展到整个Internet,以使得构造这类新应用程序成为可能。nCOM定义了创建、配置和使用ActiveX应用程序的规则。它是一个二进制标准,包含了一系列规则,目的是构建与语言无关的,面向对象的应用程序。11/14/202235/38ActiveX可
18、以用来开发能在不同的开发环境中重复使用的组件。下面是其中的一些技术:在一个程序中自动操作另一个程序。例如,在测试程序中,可以使用ActiveX自动化使LabWindows/CVI程序中在后台操作Microsoft Word,生成带有图形和表格并显示不同字体的测试报告。在外部程序中使用独立的交互式对象。例如,可以在容器中(如LabWindows/CVI的面板)嵌入并使用一个Microsoft Calendar控件或者Measurement Studio 3D Graph控件。在容器中(如LabWindows/CVI的面板)查看文档。例如,可以把一个Microsoft Word文档或Excel电子
19、表格放在LabWindows/CVI的面板中显示。11/14/202236/38ActiveX控件nActiveX控件是LabWindows/CVI的外部组件,可以象LabWindows/CVI的内部控件一样使用。设计带有ActiveX控件的程序n选择ActiveX控件:在UIR窗口选择CreatActiveX,选择Creat Control选项,在ActiveX控件列表中选择需要的ActiveX控件,单击OK按钮。n设置ActiveX控件属性:双击ActiveX控件,也可以点击编辑控件对话框中的“Property Sheets”按钮,编辑控件特性页。11/14/202237/38n生成Act
20、iveX控件驱动程序:在Tools菜单,选择Create ActiveX Controller,或右击ActiveX控件选择Generate ActiveX Control Driver,运行特定控件的ActiveX控制器向导,完成之后生成.fp文件。n在使用.fp中的函数之前,用GetObjHandleFromActiveXCtrl函数获得ActiveX控件句柄。设计举例(媒体播放器)11/14/202238/38n变量、函数、参数名称的命名建议名称要有意义,使用单词或缩写不易过长,不要超过40个字符,20个以内为宜宏定义:全部用大写字母,字符之间用下划线分隔,如:#define CHANNEL_NUMBER 10;变量名和函数参数名:第一个单词全用小写,其余单词词首大写,其余用小写,如:int bufferSize;double dSampRate;函数名:每个单词开头字母大写,其余用小写,如:double ReadCVT(int chNumber)int SetStopFrequency(double stopFrequency)11/14/2022