⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sample2.c

📁 机械工业出版社 Lab Windows/CVI逐步深入与开发实例源代码
💻 C
字号:
#include <utility.h>
#include <cvirte.h>		
#include <userint.h>
#include "sample2.h"

static int panelHandle;
//定义全局变量,用来储存测试面板的句柄
static int testpanelHandle;


int main (int argc, char *argv[])
{
	if (InitCVIRTE (0, argv, 0) == 0)	
		return -1;	

	if ((panelHandle = LoadPanel (0, "sample2.uir", PANEL)) < 0)
		return -1;
		
	DisplayPanel (panelHandle);
	
    //添加代码,初始化变量
    testpanelHandle=-1;
    
    RunUserInterface ();
	return 0;
}								 

int CVICALLBACK PanelCallback (int panel, int event, void *callbackData,
		int eventData1, int eventData2)
{
	switch (event)
		{
		case EVENT_CLOSE:
		
			//退出消息循环
			QuitUserInterface (0);
			
			break;
		}
	return 0;
}

int CVICALLBACK Quit (int panel, int control, int event,
		void *callbackData, int eventData1, int eventData2)
{
	switch (event)
		{
		case EVENT_COMMIT:
		
			//退出消息循环
			QuitUserInterface (0);
			
			break;
		}
	return 0;
}

int CVICALLBACK ShowPanel (int panel, int control, int event,
		void *callbackData, int eventData1, int eventData2)
{
	
	char title[20];
	
	switch (event)
		{
		case EVENT_COMMIT:
		
        //如果测试面板已经显示,退出		
        if(testpanelHandle<0)
		  {
		        //从String控件中取值
		        GetCtrlVal (panel, PANEL_TITLE, title);
		      
			    if(control==PANEL_SHOWCHILDPANEL)
			    {
                    //以子面板的形式加载测试面板
                    testpanelHandle=LoadPanel (panel, "sample2.uir", TESTPANEL);
			    }
			    
			    if(control==PANEL_SHOWPARENTPANEL)
			    {
                    //以父面板的形式加载测试面板	
                    testpanelHandle=LoadPanel (0, "sample2.uir", TESTPANEL);
			    }
			    
                //设置面板标题属性
                SetPanelAttribute (testpanelHandle, ATTR_TITLE, title);
			    
			    DisplayPanel(testpanelHandle);
		  }
		break;
		}
  return 0;
}

int CVICALLBACK RunProgram (int panel, int control, int event,
		void *callbackData, int eventData1, int eventData2)
{
	
	int i;
	
	switch (event)
		{
		case EVENT_COMMIT:
		
           //从Ring控件中取值
           GetCtrlVal (panel, PANEL_PROGRAM, &i);
	       
           //调用执行可执行文件函数LaunchExecutable,
           //根据Ring控件的值设置不同的参数
           //函数参数是可执行文件的路径和命令参数
		   switch(i)
			{
			
			case 0:
			 LaunchExecutable ("C:\\WINDOWS\\NOTEPAD.EXE");
			    break;
			    
			case 1:
			 LaunchExecutable ("C:\\Program Files\\Accessories\\MSPAINT.EXE");
			    break;
			    
			case 2:
			 LaunchExecutable ("C:\\WINDOWS\\CALC.EXE");
			    break;
			    
		    }
			break;
		}
	return 0;
}
int CVICALLBACK EnablePanel (int panel, int control, int event,
		void *callbackData, int eventData1, int eventData2)
{
	
	int i;
	
	switch (event)
		{
		case EVENT_COMMIT:
		
          //获取复选框控件自身的值
          GetCtrlVal (panel, control, &i);
	      
          //设置控件TITLE、SHOWPARENTPANEL、SHOWCHILDPANEL有效属性   
          SetCtrlAttribute (panel, PANEL_TITLE, ATTR_DIMMED, i);
	      SetCtrlAttribute (panel, PANEL_SHOWPARENTPANEL, ATTR_DIMMED, i);
	      SetCtrlAttribute (panel, PANEL_SHOWCHILDPANEL, ATTR_DIMMED, i);
	      
			break;
		}
	return 0;
}

int CVICALLBACK EnableProgram (int panel, int control, int event,
		void *callbackData, int eventData1, int eventData2)
{
	
	int i;
	
	switch (event)
		{
		case EVENT_COMMIT:
		
          //获取复选框控件自身的值
          GetCtrlVal (panel, control, &i);
	      
          //设置控件RUNPRIGRAM、PROGRAM有效属性
          SetCtrlAttribute (panel, PANEL_RUNPRIGRAM, ATTR_DIMMED, i);
	      SetCtrlAttribute (panel, PANEL_PROGRAM, ATTR_DIMMED, i);
	      
			break;
		}
	return 0;
}

int CVICALLBACK Close (int panel, int control, int event,
		void *callbackData, int eventData1, int eventData2)
{
	switch (event)
		{
		case EVENT_COMMIT:
		
          //关闭测试面板
          DiscardPanel (panel);
		  
          //给测试面板句柄变量赋值,表示测试面板关闭  
          testpanelHandle=-1;
		  
			break;
		}
	return 0;
}

//以下代码是本章习题和上机练习题2的答案
//VisiblePanel和VisibleProgram函数实现设置控件的可见属性
int CVICALLBACK VisiblePanel (int panel, int control, int event,
		void *callbackData, int eventData1, int eventData2)
{
	
	int i;
	
	switch (event)
		{
		case EVENT_COMMIT:
		
	      //获取控件VISIBLEPANEL的值
	      GetCtrlVal (panel, control, &i);
	      
          //设置控件TITLE、SHOWPARENTPANEL、SHOWCHILDPANEL可见属性   
	      SetCtrlAttribute (panel, PANEL_TITLE, ATTR_VISIBLE, !i);
	      SetCtrlAttribute (panel, PANEL_SHOWPARENTPANEL, ATTR_VISIBLE, !i);
	      SetCtrlAttribute (panel, PANEL_SHOWCHILDPANEL, ATTR_VISIBLE, !i);
	      
			break;
		}
	return 0;
}

int CVICALLBACK VisibleProgram (int panel, int control, int event,
		void *callbackData, int eventData1, int eventData2)
{
	
	int i;
	
	switch (event)
		{
		case EVENT_COMMIT:
		
	      //获取控件VISIBLEPROGRAM的值
	     GetCtrlVal (panel, control, &i);
	     
          //设置控件RUNPRIGRAM、PROGRAM可见属性
	     SetCtrlAttribute (panel, PANEL_RUNPRIGRAM, ATTR_VISIBLE, !i);
	     SetCtrlAttribute (panel, PANEL_PROGRAM, ATTR_VISIBLE, !i);
	     
			break;
		}
	return 0;
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -