原创 Labwindows/cvi8.5 树控件Tree的使用

2010-6-12 14:01 7944 12 12 分类: 软件与OS

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;
}
//*********************************************************
//*********************************************************
//*********************************************************


 

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
12
关闭 站长推荐上一条 /3 下一条