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

📄 sample7.c

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

//定义面板句柄、控件ID号、菜单栏句柄、菜单、菜单项ID号
int panelHandle,Button,LED,Meter,Timer,Slide,
    MenuBarHandle,SystemMenuID,QuitMenuItem,
    SpeedMenuID,FastMenuItem,SlowMenuItem,
    MediumMenuItem;

//声明BuildGUI函数,用来创建用户界面
void	BuildGUI(void);

//声明面板、控件、菜单项回调函数
int CVICALLBACK PanelCallback (int panel, int event, void *callbackData,
		int eventData1, int eventData2);
int CVICALLBACK TimerCallback (int panel, int control, int event,
		void *callbackData, int eventData1, int eventData2);
void CVICALLBACK QuitMemuCallBack ( int menuBarHandle,
         int menuItemID, void *callbackData, int panelHandle );
void CVICALLBACK FastMemuCallBack ( int menuBarHandle,
         int menuItemID, void *callbackData, int panelHandle );
void CVICALLBACK MediumMemuCallBack ( int menuBarHandle,
         int menuItemID, void *callbackData, int panelHandle );
void CVICALLBACK SlowMemuCallBack ( int menuBarHandle,
         int menuItemID, void *callbackData, int panelHandle );


int main (int argc, char *argv[])
{
	int speed,panel,control;
	
	if (InitCVIRTE (0, argv, 0) == 0)    
		return -1;  
		
	//调用BuildGUI函数创建用户界面 
	BuildGUI();
	
	//进入循环
	do
	{
	
	    //获取发生事件的面板句柄和控件ID号
	    GetUserEvent (1, &panel, &control);
	    
	    //如果控件ID号为Button,退出程序
	    if(control==Button) break;
    	
	    //如果控件ID号为Slide,设置Timer控件的时间间隔
	    if(control==Slide)  
	       { 
	         //获取Slide控件的值
	         GetCtrlVal(panelHandle,Slide,&speed);
	         
             //设置菜单项的Checked属性
             SetMenuBarAttribute (MenuBarHandle, FastMenuItem, ATTR_CHECKED, 0);
             SetMenuBarAttribute (MenuBarHandle, MediumMenuItem, ATTR_CHECKED, 0);
             SetMenuBarAttribute (MenuBarHandle, SlowMenuItem, ATTR_CHECKED, 0);
             
             //根据Slide控件的值,设置相应菜单项的Checked属性为true,
             //并设置Timer控件的时间间隔
	         if(speed==0)  	
	         {SetCtrlAttribute (panelHandle, Timer, ATTR_INTERVAL, 1.0);
              SetMenuBarAttribute (MenuBarHandle, SlowMenuItem, ATTR_CHECKED, 1);
	         }
	         
	         if(speed==1)  	
	         {SetCtrlAttribute (panelHandle, Timer, ATTR_INTERVAL, 0.5);
              SetMenuBarAttribute (MenuBarHandle, MediumMenuItem, ATTR_CHECKED, 1);
	         }
	         
	         if(speed==2)  	
	         {SetCtrlAttribute (panelHandle, Timer, ATTR_INTERVAL, 0.25);
              SetMenuBarAttribute (MenuBarHandle, FastMenuItem, ATTR_CHECKED, 1);
	         }
	         
	      }
	} while (1);
    return 0;
}

// BuildGUI函数定义
void BuildGUI(void)
{
	//创建一面板
	panelHandle = NewPanel (0, "Sample7", 100, 100, 220, 300);
	
    //应用SetPanelAttribute函数为面板安装回调函数,
    //也可调用InstallPanelCallback函数安装面板回调函数
	SetPanelAttribute (panelHandle, ATTR_CALLBACK_FUNCTION_POINTER,
					   PanelCallback);
					   
    //创建一菜单栏
    MenuBarHandle = NewMenuBar (panelHandle);
	
	//创建新菜单
	SystemMenuID=NewMenu (MenuBarHandle, "S__ystem", -1);
	SpeedMenuID=NewMenu (MenuBarHandle, "Sp__eed", -1);
	
	//创建新菜单项,并为新菜单项设置快捷键和回调函数
	QuitMenuItem=NewMenuItem (MenuBarHandle, SystemMenuID, "__Quit", -1,
								VAL_MENUKEY_MODIFIER | 'Q',
								QuitMemuCallBack, NULL);
    FastMenuItem = NewMenuItem (MenuBarHandle, SpeedMenuID, "__Fast", -1,
								VAL_MENUKEY_MODIFIER | 'F',
								FastMemuCallBack, NULL);
	MediumMenuItem = NewMenuItem (MenuBarHandle, SpeedMenuID, "__Medium",
								  -1, VAL_MENUKEY_MODIFIER | 'M',
								  MediumMemuCallBack,NULL);
	SlowMenuItem = NewMenuItem (MenuBarHandle, SpeedMenuID, "__Slow",
								  -1, VAL_MENUKEY_MODIFIER | 'S', 
								  SlowMemuCallBack,NULL);
								  
	//设置SlowMenuItem菜单项Checked属性为true
	SetMenuBarAttribute (MenuBarHandle, SlowMenuItem, ATTR_CHECKED, 1);
	
    //创建Button、Meter、LED、Slide控件
    Button = NewCtrl (panelHandle, CTRL_SQUARE_COMMAND_BUTTON, "__Quit",
						  165, 165);
						  
	Meter = NewCtrl (panelHandle, CTRL_NUMERIC_METER, "Meter", 50,
						  45);
						  
	LED = NewCtrl (panelHandle, CTRL_ROUND_LED, "Over Run", 170, 60);
	
	Slide = NewCtrl (panelHandle, CTRL_RING_VSLIDE, "Speed", 60, 260);
	
    //向Slide控件添加项目
    InsertListItem (panelHandle, Slide, 0, "Slow", 0);
	InsertListItem (panelHandle, Slide, 1, "Medium", 1);
	InsertListItem (panelHandle, Slide, 2, "Fast", 2);
	
	//设置Slide控件的高度和宽度
	SetCtrlAttribute (panelHandle, Slide, ATTR_HEIGHT, 120);
	SetCtrlAttribute (panelHandle, Slide, ATTR_WIDTH,10 );
	
    //创建Timer控件
    Timer = NewCtrl (panelHandle, CTRL_TIMER, "", 0, 0);
	
    //应用SetCtrlAttribute函数为Timer控件安装回调函数,
    //也可应用InstallCtrlCallback函数
	SetCtrlAttribute (panelHandle, Timer, ATTR_CALLBACK_FUNCTION_POINTER,
					  TimerCallback);
					  
	//设置Timer控件的时间间隔
	SetCtrlAttribute (panelHandle, Timer, ATTR_INTERVAL, 1.0);
	
	//设置Button控件处于激活状态
	SetActiveCtrl (panelHandle, Button);
	
    //显示面板
    DisplayPanel(panelHandle);
}

int CVICALLBACK TimerCallback (int panel, int control, int event,
		void *callbackData, int eventData1, int eventData2)
{
	double max,min,value;
	
	switch (event)
		{
		//定时器触发事件
		case EVENT_TIMER_TICK:
		
			//产生-12至12范围内的随机数
			value=24.0*rand()/32767.0-12.0;
			
            //获取Meter控件的最大值和最小值
            GetCtrlAttribute (panelHandle, Meter, ATTR_MAX_VALUE, &max);
			GetCtrlAttribute (panelHandle, Meter, ATTR_MIN_VALUE, &min);
			
	    	//判断随机数是否超出Meter控件显示范围,
            //如果超出设置LED控件值为1,否则设为0
			if((value>max)||((value<min)))  	
			   SetCtrlVal (panelHandle, LED, 1);
			   else
			   SetCtrlVal (panelHandle, LED, 0);
			   
           //设置Meter控件的值为产生的随机数
            SetCtrlVal (panelHandle, Meter, value);
			
		    break;
		}
	return 0;
}

void CVICALLBACK QuitMemuCallBack ( int menuBarHandle,
         int menuItemID, void *callbackData, int panelHandle )
{
	 //设置Button控件处于激活状态
	 SetActiveCtrl (panelHandle, Button);
	 
     //调用FakeKeystroke函数产生虚拟按下Enter事件
     // FakeKeystroke函数包含在用户界面函数库,用于产生虚拟按键事件
     FakeKeystroke (VAL_ENTER_VKEY);
}

void CVICALLBACK FastMemuCallBack ( int menuBarHandle,
         int menuItemID, void *callbackData, int panelHandle )
{
     //设置Slide控件值
     SetCtrlVal (panelHandle, Slide, 2);
     
	 //设置Timer控件时间间隔
	 SetCtrlAttribute (panelHandle, Timer, ATTR_INTERVAL, 0.25); 
	 
     //设置菜单项Checked属性 
     SetMenuBarAttribute (MenuBarHandle, FastMenuItem, ATTR_CHECKED, 1);
     SetMenuBarAttribute (MenuBarHandle, MediumMenuItem, ATTR_CHECKED, 0);
     SetMenuBarAttribute (MenuBarHandle, SlowMenuItem, ATTR_CHECKED, 0);
}
void CVICALLBACK MediumMemuCallBack ( int menuBarHandle,
         int menuItemID, void *callbackData, int panelHandle )
{
     //设置Slide控件值
	 SetCtrlVal (panelHandle, Slide, 1);
	 
	 //设置Timer控件时间间隔
	 SetCtrlAttribute (panelHandle, Timer, ATTR_INTERVAL, 0.5); 
	 
     //设置菜单项Checked属性 
     SetMenuBarAttribute (MenuBarHandle, FastMenuItem, ATTR_CHECKED, 0);
     SetMenuBarAttribute (MenuBarHandle, MediumMenuItem, ATTR_CHECKED, 1);
     SetMenuBarAttribute (MenuBarHandle, SlowMenuItem, ATTR_CHECKED, 0);
}
void CVICALLBACK SlowMemuCallBack ( int menuBarHandle,
         int menuItemID, void *callbackData, int panelHandle )
{
     //设置Slide控件值
	 SetCtrlVal (panelHandle, Slide, 0);
	 
	 //设置Timer控件时间间隔
	 SetCtrlAttribute (panelHandle, Timer, ATTR_INTERVAL, 1.0);
	 
     //设置菜单项Checked属性 
     SetMenuBarAttribute (MenuBarHandle, FastMenuItem, ATTR_CHECKED, 0);
     SetMenuBarAttribute (MenuBarHandle, MediumMenuItem, ATTR_CHECKED, 0);
     SetMenuBarAttribute (MenuBarHandle, SlowMenuItem, ATTR_CHECKED, 1);
}

int CVICALLBACK PanelCallback (int panel, int event, void *callbackData,
		int eventData1, int eventData2)
{
	switch (event)
		{
		case EVENT_CLOSE:
		
            //设置Button控件处于激活状态
	        SetActiveCtrl (panelHandle, Button);
	        
            //调用FakeKeystroke函数产生虚拟按下Enter事件
            // FakeKeystroke函数包含在用户界面函数库,用于产生虚拟按键事件
	        FakeKeystroke (VAL_ENTER_VKEY);
	        
			break;
		}
	return 0;  
	}

⌨️ 快捷键说明

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