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, \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, \__CVIUserHInst,PANEL1, &panel1, PANEL2, &panel2, PANEL3, &panel3, 0);
运行后的界面:
代码如下:
#include
#include
#include \
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, \< 0)
return -1;
tabCtrl = EasyTab_ConvertFromCanvas (panelHandle, PANEL_CANVAS); EasyTab_LoadPanels (panelHandle, tabCtrl,1, \
__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子界面\ 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, \ 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)