LabWindows CVI Easy tab control使用教程
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
LabWindows/CVI中EasyTab Control的使用教程
2016年12月4日,星期日狄阁老
最近在使用国产板卡过程中发现,很多板卡的测试软件都用到了类似于tab的控件,但是子界面很多,又要团队完成的,如果还使用Tab控件就非常麻烦。在CVI使用中,发现CANVAS 控件和easy tab.fp可以完成Tab控件的任务,下面开始介绍如何使用Easytab control
先新建一个工程,再新建一个主界面和三个子界面,在主界面上添加一个CANVAS控件,再右下角load instruments,找到CVI安装目录下的Toolslib\custctrl下的easytab.fp,再在工程下添加这个fp。
首先介绍一下easytab.fp
双击这个fp.可以看到这个fp内的函数,最重要的两个函数:
1)EasyTab_ConvertFromCanvas (界面句柄, CANVAS的ID);
2)EasyTab_LoadPanels (参数,参数,…..);
EasyTab_ConvertFromCanvas函数简单,重点来说EasyTab_LoadPanels
参数1:Panel 来自下面这行代码
if ((panelHandle = LoadPanel (0, "EasyTabControlTest.uir", PANEL)) < 0) return -1;
参数2:Tab Control 来自这行代码
tabCtrl = EasyTab_ConvertFromCanvas (panelHandle, PANEL_CANVAS);
参数3:Row
该参数设置为1
参数4:File Name
指工程的.uir
参数5:Calling Module Handle
一般设置为常量:__CVIUserHInst
参数6:Panel IDs and Handle Pointers
该参数在要设置子界面的ID和句柄
例如:三个界面
EasyTab_LoadPanels (panelHandle, tabCtrl, 1, "EasyTabControlTest.uir", __CVIUserHInst,PANEL1, &panel1, PANEL2, &panel2, PANEL3, &panel3, 0);
运行后的界面:
代码如下:
#include
#include "easytab.h"
#include
#include
#include "EasyTabControlTest.h"
static int panelHandle,tabCtrl,ActPan;
int panel1,panel2,panel3,panel4;
int main (int argc, char *argv[])
{
if (InitCVIRTE (0, argv, 0) == 0)
return -1; /* out of memory */
if ((panelHandle = LoadPanel (0, "EasyTabControlTest.uir", PANEL)) < 0)
return -1;
tabCtrl = EasyTab_ConvertFromCanvas (panelHandle, PANEL_CANVAS);
EasyTab_LoadPanels (panelHandle, tabCtrl,1, "EasyTabControlTest.uir",
__CVIUserHInst, PANEL1, &panel1, PANEL2, &panel2, PANEL3, &panel3, 0);
EasyTab_SetAttribute (panelHandle, tabCtrl,
ATTR_EASY_TAB_STRETCH_TO_FIT, 0);
//InstallPopup(panelHandle);
DisplayPanel (panelHandle);
RunUserInterface ();
DiscardPanel (panelHandle);
return 0;
}
//退出事件
int CVICALLBACK QuitCallback (int panel, int control, int event, void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
QuitUserInterface (0);
break;
}
return 0;
}
//切换TAB的事件
int CVICALLBACK TabCtrlCallBack (int panel, int control, int event, void *callbackData, int eventData1, int eventData2)
{
char ActPanOut[100];
switch (event)
{
case EVENT_TAB_CHANGED:
EasyTab_GetAttribute (panelHandle, tabCtrl ,
ATTR_EASY_TAB_ACTIVE_PANEL, &ActPan);
//EasyTab_GetAttribute (panelHandle, tabCtrl,
ATTR_EASY_TAB_META_FONT, mm);
Fmt (ActPanOut, "激活了第%d子界面", ActPan-1);
SetCtrlVal (panelHandle, PANEL_STRING, ActPanOut);
break;
}
return 0;
}
int CVICALLBACK AutosizeCallback (int panel, int control, int event, void *callbackData, int eventData1, int eventData2)
{
int status;
switch (event)
{
case EVENT_COMMIT:
status=EasyTab_AutoSize (panelHandle, tabCtrl);
break;
}
return 0;
}
int CVICALLBACK AddPanelCallback (int panel, int control, int event, void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
//&panel4 = NewPanel (panelHandle, "xx", 0, 0, 350, 500);
EasyTab_AddPanels (panelHandle, tabCtrl, 1,PANEL4,0,0);
break;
}
return 0;
}
//移除tab
int CVICALLBACK deltetCallback (int panel, int control, int event, void *callbackData, int eventData1, int eventData2)