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

📄 sample7_answer.c

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

int panelHandle,Button,LED,Meter,Timer,Slide,
    MenuBarHandle,SystemMenuID,QuitMenuItem,
    SpeedMenuID,FastMenuItem,SlowMenuItem,
    MediumMenuItem;

void	BuildGUI(void);

int CVICALLBACK TimerCallback (int panel, int control, int event,
		void *callbackData, int eventData1, int eventData2);

int CVICALLBACK MainCallback (int panelOrMenuBarHandle, 
          int controlOrMenuItemID,int event, 
          void *callbackData,int eventData1,
          int eventData2);
                              

int main (int argc, char *argv[])
{
	int speed,panel,control;
	
	if (InitCVIRTE (0, argv, 0) == 0)    
		return -1;  
		
	BuildGUI();
	
	do
	{
	
	    GetUserEvent (1, &panel, &control);
	    
    	if(control==Button) break;
    	
    	if(control==Slide)  
	       { 
	         GetCtrlVal(panelHandle,Slide,&speed);
	         
             SetMenuBarAttribute (MenuBarHandle, FastMenuItem, ATTR_CHECKED, 0);
             SetMenuBarAttribute (MenuBarHandle, MediumMenuItem, ATTR_CHECKED, 0);
             SetMenuBarAttribute (MenuBarHandle, SlowMenuItem, ATTR_CHECKED, 0);
             
	         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;
}

void BuildGUI(void)
{
	panelHandle = NewPanel (0, "Sample7_answer", 100, 100, 220, 300);
	
	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', NULL, NULL);
    FastMenuItem = NewMenuItem (MenuBarHandle, SpeedMenuID, "__Fast", -1,
								VAL_MENUKEY_MODIFIER | 'F',
								NULL, NULL);
	MediumMenuItem = NewMenuItem (MenuBarHandle, SpeedMenuID, "__Medium",
								  -1, VAL_MENUKEY_MODIFIER | 'M',
								  NULL,NULL);
	SlowMenuItem = NewMenuItem (MenuBarHandle, SpeedMenuID, "__Slow",
								  -1, VAL_MENUKEY_MODIFIER | 'S', 
								  NULL,NULL);
								  
	SetMenuBarAttribute (MenuBarHandle, SlowMenuItem, ATTR_CHECKED, 1);
	
    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);
	
	InsertListItem (panelHandle, Slide, 0, "Slow", 0);
	InsertListItem (panelHandle, Slide, 1, "Medium", 1);
	InsertListItem (panelHandle, Slide, 2, "Fast", 2);
	
	SetCtrlAttribute (panelHandle, Slide, ATTR_HEIGHT, 120);
	SetCtrlAttribute (panelHandle, Slide, ATTR_WIDTH,10 );
	
	Timer = NewCtrl (panelHandle, CTRL_TIMER, "", 0, 0);
	
	SetCtrlAttribute (panelHandle, Timer, ATTR_CALLBACK_FUNCTION_POINTER,
					  TimerCallback);
					  
	SetCtrlAttribute (panelHandle, Timer, ATTR_INTERVAL, 1.0);
	
	SetActiveCtrl (panelHandle, Button);
	
	InstallMainCallback (MainCallback, 0, 0);
	
	DisplayPanel(panelHandle);
}

int CVICALLBACK MainCallback (int panelOrMenuBarHandle, int controlOrMenuItemID,
                              int event, void *callbackData,int eventData1,
                              int eventData2)
{
	if((panelOrMenuBarHandle==MenuBarHandle)&&
	     (controlOrMenuItemID==QuitMenuItem))
	{
	 SetActiveCtrl (panelHandle, Button);
	 
	 FakeKeystroke (VAL_ENTER_VKEY);
	}

	if((panelOrMenuBarHandle==MenuBarHandle)&&
	     (controlOrMenuItemID==FastMenuItem))
    {
     SetCtrlVal (panelHandle, Slide, 2);
     
	 SetCtrlAttribute (panelHandle, Timer, ATTR_INTERVAL, 0.25); 
	 
     SetMenuBarAttribute (MenuBarHandle, FastMenuItem, ATTR_CHECKED, 1);
     SetMenuBarAttribute (MenuBarHandle, MediumMenuItem, ATTR_CHECKED, 0);
     SetMenuBarAttribute (MenuBarHandle, SlowMenuItem, ATTR_CHECKED, 0);
    }
    
	if((panelOrMenuBarHandle==MenuBarHandle)&&
	     (controlOrMenuItemID==MediumMenuItem))
    {
	 SetCtrlVal (panelHandle, Slide, 1);
	 
	 SetCtrlAttribute (panelHandle, Timer, ATTR_INTERVAL, 0.5); 
	 
     SetMenuBarAttribute (MenuBarHandle, FastMenuItem, ATTR_CHECKED, 0);
     SetMenuBarAttribute (MenuBarHandle, MediumMenuItem, ATTR_CHECKED, 1);
     SetMenuBarAttribute (MenuBarHandle, SlowMenuItem, ATTR_CHECKED, 0);    
    }
    
	if((panelOrMenuBarHandle==MenuBarHandle)&&
	     (controlOrMenuItemID==SlowMenuItem))
    {
	 SetCtrlVal (panelHandle, Slide, 0);
	 
	 SetCtrlAttribute (panelHandle, Timer, ATTR_INTERVAL, 1.0);
	 
     SetMenuBarAttribute (MenuBarHandle, FastMenuItem, ATTR_CHECKED, 0);
     SetMenuBarAttribute (MenuBarHandle, MediumMenuItem, ATTR_CHECKED, 0);
     SetMenuBarAttribute (MenuBarHandle, SlowMenuItem, ATTR_CHECKED, 1);    
    }
    
	if((panelOrMenuBarHandle==panelHandle)&&(event==EVENT_CLOSE))
	{
	    SetActiveCtrl (panelHandle, Button);
	       
	    FakeKeystroke (VAL_ENTER_VKEY);
	}
	return 0; 
}

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:
		
			value=24.0*rand()/32767.0-12.0;
			
			GetCtrlAttribute (panelHandle, Meter, ATTR_MAX_VALUE, &max);
			GetCtrlAttribute (panelHandle, Meter, ATTR_MIN_VALUE, &min);
			
			if((value>max)||((value<min)))  	
			   SetCtrlVal (panelHandle, LED, 1);
			   else
			   SetCtrlVal (panelHandle, LED, 0);
			   
			SetCtrlVal (panelHandle, Meter, value);
			
		    break;
		}
	return 0;
}

⌨️ 快捷键说明

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