https://static.assets-stash.eet-china.com/album/old-resources/2010/6/10/402ee23b-eb3f-4ed4-9b54-88ef97a4f2ce.rar//*********************************************************
// Labwindows/cvi8.5 演示树控件Tree的使用
// szlihongtao
// 2010-06-10
// 参照 王建新的<Labwindows/cvi测试技术及工程应用> page38
// 稍有改写
//*********************************************************
#include <formatio.h>
#include <cvirte.h>
#include <userint.h>
#include "textlisttree.h"
//*********************************************************
static int panelHandle;
//*********************************************************
//主程序
//*********************************************************
int main (int argc, char *argv[])
{
if (InitCVIRTE (0, argv, 0) == 0)
return -1; /* out of memory */
if ((panelHandle = LoadPanel (0, "textlisttree.uir", PANEL)) < 0)
return -1;
DisplayPanel (panelHandle);
RunUserInterface ();
DiscardPanel (panelHandle);
return 0;
}
//*********************************************************
//"转移"按钮的回调函数
//*********************************************************
int CVICALLBACK transfer(int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
int maxitems;
int i;
char label[128];
char Tag[128];
int value;
int f_checked;
static int j="0",k;
switch (event)
{
case EVENT_COMMIT: //清除指定列表框
{
ClearListCtrl (panelHandle, PANEL_TREE); //清除控件的内容
InsertTextBoxLine (panelHandle, PANEL_TEXTBOX, -1, "转移并显示目录"); //向文本框的末尾添加一行文本
GetNumListItems (panelHandle, PANEL_LISTBOX, &maxitems); //获得列表框项目的数目
for (j=i=0;i<maxitems;i++)
{
//获得列表框中指定项目的选中状态
IsListItemChecked (panelHandle, PANEL_LISTBOX, i, &f_checked);
//如果该项目被选中,则执行以下操作
if (f_checked)
{
j = j + 1; // 为什么要 +1 呢 ?
GetValueFromIndex (panelHandle, PANEL_LISTBOX, i, &value); //获得指定索引项目的value值
GetLabelFromIndex (panelHandle, PANEL_LISTBOX, i, label); //获得指定索引项目的标题
//将选中的项目插入到指定的树控件
InsertTreeItem (panelHandle, PANEL_TREE, VAL_SIBLING, j-2, VAL_NEXT, label, "", Tag, value);
// 这个函数要仔细研究!!!!
}
}
break;
}
}
return 0;
}
//*********************************************************
//"清除已选目录"按钮的回调函数
//*********************************************************
int CVICALLBACK clear (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
{
ClearListCtrl (panelHandle, PANEL_TREE);
InsertTextBoxLine (panelHandle, PANEL_TEXTBOX, -1, "清除已选目录"); //向文本框末尾插入一行文本
break;
}
}
return 0;
}
//*********************************************************
int CVICALLBACK insert (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
char newitem[128];
switch (event)
{
case EVENT_COMMIT:
{
InsertTextBoxLine (panelHandle, PANEL_TEXTBOX, -1, "添加目录");
GetCtrlVal (panel, PANEL_STRING_INSERT, newitem);
//向列表框插入新的项目
InsertListItem (panelHandle, PANEL_LISTBOX, -1, newitem, 0);
break;
}
}
return 0;
}
//*********************************************************
// 移除指定目录
//*********************************************************
int CVICALLBACK delete (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
int maxitems;
char removeitem[128];
int i;
char label[128];
switch (event)
{
case EVENT_COMMIT:
{
InsertTextBoxLine (panelHandle, PANEL_TEXTBOX, -1, "移除目录"); // 提示
GetCtrlVal (panelHandle, PANEL_STRING_DELETE, removeitem); // 指定目录的内容
GetNumListItems (panelHandle, PANEL_LISTBOX, &maxitems); // 列表项的个数
for (i=0;i<maxitems;i++)
{
GetLabelFromIndex (panelHandle, PANEL_LISTBOX, i, label); //获得指定索引的项目标题
//判断该标题是否和指定的内容相一致
if (CompareStrings (label, 0, removeitem, 0, 1) == 0) // (label, 0, removeitem, 0, 1)中的1表示要识别字母的大写/小写
{
//删除列表框指定项目
DeleteListItem (panelHandle, PANEL_LISTBOX, i, 1);
--i; // 注意是i--,删除指定项后,指向最近的项
--maxitems;
// 注意,此时没有退出函数,因为要遍历所有的项,有些项的项目标题是一样的
}
}
break;
}
}
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;
}
//*********************************************************
//*********************************************************
//*********************************************************
文章评论(0条评论)
登录后参与讨论