?? sample5.c
字號:
#include <analysis.h>
#include "toolbox.h"
#include <ansi_c.h>
#include <cvirte.h> /* Needed if linking in external compiler; harmless otherwise */
#include <userint.h>
#include "sample5.h"
static int panelHandle;
static double randomdata[100];
double temp;
int main (int argc, char *argv[])
{
if (InitCVIRTE (0, argv, 0) == 0)
return -1;
if ((panelHandle = LoadPanel (0, "sample5.uir", PANEL)) < 0)
return -1;
DisplayPanel (panelHandle);
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 QuitCallback (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
QuitUserInterface (0);
break;
}
return 0;
}
int CVICALLBACK PlotData(int panel, int control, int event, void *callbackData, int eventData1, int eventData2)
{
int color, style;
double data[100];
if (event == EVENT_COMMIT)
{
//從控件TRACECOLOR和TRACESTYLE中取值
//作為曲線的顏色和形狀
GetCtrlVal (panel, PANEL_TRACECOLOR, &color);
GetCtrlVal (panel, PANEL_TRACESTYLE, &style);
//調用SetRange函數設置Graph控件的Y軸范圍
SetRange(panel,PANEL_SCALE,EVENT_COMMIT,0,0,0);
//刪除Graph控件上所有曲線或圖形
DeleteGraphPlot (panel, PANEL_GRAPH, -1, 1);
//顯示Graph控件的邊界
SetCtrlAttribute (panel, PANEL_GRAPH, ATTR_BORDER_VISIBLE, 1);
//產生白噪聲信號
WhiteNoise (100, 100, -1, data);
//在Graph控件中作曲線
PlotWaveform (panel, PANEL_GRAPH, data, 100, VAL_DOUBLE, 1, 0, 0, 1,
style, VAL_EMPTY_SQUARE, VAL_SOLID, 1, color);
}
return 0;
}
int CVICALLBACK PlotShape(int panel, int control, int event, void *callbackData, int eventData1, int eventData2)
{
int color, color2, shape, fill;
if (event == EVENT_COMMIT) {
//從控件FILLCOLOR、SHAPE和FILLMODE中取值
//作為所作圖形的顏色、形狀和是否填充
GetCtrlVal (panel, PANEL_FILLCOLOR, &color);
GetCtrlVal (panel, PANEL_SHAPE, &shape);
GetCtrlVal (panel, PANEL_FILLMODE, &fill);
//判斷是否填充
if (fill)
//設置背景色為透明色
color2 = VAL_TRANSPARENT;
else
//設置背景色輸入值
color2 = color;
//刪除所有曲線或圖形
DeleteGraphPlot (panel, PANEL_GRAPH, -1, 1);
//設定Graph控件坐標軸范圍
SetAxisRange (panel, PANEL_GRAPH, VAL_MANUAL, -10, 10, VAL_MANUAL,
-10, 10);
//隱藏Graph控件邊界
SetCtrlAttribute (panel, PANEL_GRAPH, ATTR_BORDER_VISIBLE, 0);
//判別圖形種類
switch (shape) {
case 0 :
//作矩形
PlotRectangle (panel, PANEL_GRAPH, -5, -5, 5, 5, color, color2);
break;
case 1 :
//作橢圓形
PlotOval (panel, PANEL_GRAPH, -5, -5, 5, 5, color, color2);
break;
case 2 :
//作弧形
PlotArc (panel, PANEL_GRAPH, -5, -5, 5, 5, 0, 120, color, color2);
break;
case 3 :
//作點
PlotPoint (panel, PANEL_GRAPH, -5, -5, VAL_EMPTY_SQUARE, color);
break;
case 4 :
//顯示文字
PlotText (panel, PANEL_GRAPH, 0, 0, "LabWindows/CVI",
VAL_APP_META_FONT, color, VAL_TRANSPARENT);
break;
}
}
return 0;
}
int CVICALLBACK TimerCallback (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
double temp;
int backcolor,plotcolor,k;
switch (event)
{
//定時器觸發事件
case EVENT_TIMER_TICK:
//獲取BACKCOLOR控件的值
GetCtrlVal (panel, PANEL_BACKCOLOR, & backcolor);
//設置STRIPCHART 控件的背景色
SetCtrlAttribute(panel, PANEL_STRIPCHART,
ATTR_PLOT_BGCOLOR, backcolor);
//本章習題與上機練習題的答案
//獲取PLOTCOLOR控件的值
GetCtrlVal (panel, PANEL_PLOTCOLOR, & plotcolor);
//修改STRIPCHART控件曲線的顏色
SetTraceAttribute (panel, PANEL_STRIPCHART, 1, ATTR_TRACE_COLOR,
plotcolor);
//隨機數組左移
for(k=0;k<99;k++)
randomdata[k]=randomdata[k+1];
//產生在0-100范圍內的隨機數
temp =(double)( rand ()*100/RAND_MAX);
//修改隨機數組最后一個數的值
randomdata[99]=temp;
//在Strip Chart控件上作曲線圖
PlotStripChart (panel, PANEL_STRIPCHART, randomdata, 100, 0, 0,
VAL_DOUBLE);
break;
}
return 0;
}
int CVICALLBACK GraphCallback (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
double x,y;
switch (event)
{
case EVENT_COMMIT:
//獲取光標坐標
GetGraphCursor (panel, PANEL_GRAPH, 1, &x, &y);
//顯示光標坐標
SetCtrlVal (panel, PANEL_XCOORD, x);
SetCtrlVal (panel, PANEL_YCOORD, y);
break;
}
return 0;
}
int CVICALLBACK StripChartPlot (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
int i;
switch (event)
{
case EVENT_COMMIT:
//獲取控件STRIPCHARTPLOT的值
GetCtrlVal(panel,control,&i);
//根據控件STRIPCHARTPLOT的值修改控件TIMER的Enable屬性
SetCtrlAttribute (panel, PANEL_TIMER, ATTR_ENABLED, i);
break;
}
return 0;
}
int CVICALLBACK GridColor (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
int i;
switch (event)
{
case EVENT_COMMIT:
//獲取控件GRIDCOLOR的值
GetCtrlVal(panel,control,&i);
//設置控件GRAPH的刪格顏色
SetCtrlAttribute (panel, PANEL_GRAPH, ATTR_GRID_COLOR, i);
break;
}
return 0;
}
int CVICALLBACK SetRange (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
int scale;
double max,min;
switch (event)
{
case EVENT_GOT_FOCUS:
//將MAX或MIN控件獲得焦點時的值儲存至全局變量temp
if(control!=PANEL_SCALE)
GetCtrlVal (panel, control, &temp);
break;
case EVENT_COMMIT:
//獲取控件SCALE、MAX、MIN的值
GetCtrlVal (panel, PANEL_SCALE, &scale);
GetCtrlVal (panel, PANEL_MAX, &max);
GetCtrlVal (panel, PANEL_MIN, &min);
//如果輸入Y坐標最大值小于最小值,
//設置控件值為原值,報錯并返回
if(max<min)
{
SetCtrlVal (panel, control, temp);
MessagePopup ("Error", "Input error");
return 0;
}
//判斷坐標縮放類型
if(scale)
//設置Y軸坐標為手動,
//根據max和min值設定Graph控件坐標范圍
SetAxisRange (panel, PANEL_GRAPH, VAL_AUTOSCALE, 0, 0, VAL_MANUAL,
min, max);
else
//設置Y軸坐標為自動,
SetAxisRange (panel, PANEL_GRAPH, VAL_AUTOSCALE, 0, 0, VAL_AUTOSCALE,
min, max);
break;
}
return 0;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -