📄 sample7.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 + -