[LabWindows_CVI测试技术及工程应用]3.7滚动条及仪器驱动使用(学习杂记)
Scroll Bar 滚动条
仪器驱动装载
Instrument——〉Load(路径为\National Instruments\CVI2017\toolslib\custctrl\scroll.fp)
滚动条控件(水平 垂直)


滚动条编程



具体细节参考https://www.bilibili.com/read/cv4728312操作,这里不再啰嗦,再自己摸索graph属性的配置,相信你一定能行!!
产生并修改源码
#include "scroll.h"
#include <cvirte.h>
#include <userint.h>
#include "scrollbar.h"
static int panelHandle;
void getvalue(void);
int main (int argc, char *argv[])
{
int value;
if (InitCVIRTE (0, argv, 0) == 0)
return -1; /* out of memory */
if ((panelHandle = LoadPanel (0, "scrollbar.uir", PANEL)) < 0)
return -1;
//将绘图控件转化成滚动条
ScrollBar_ConvertFromGraph(panelHandle, PANEL_GRAPH_VERTICAL,
scrollbarCB, &panelHandle);
ScrollBar_GetAttribute(panelHandle, PANEL_GRAPH_VERTICAL, ATTR_SB_VALUE, &value);//获取滚动条当前位置
SetCtrlVal(panelHandle, PANEL_NUMERIC_VERTICAL_VAL, value);//在NUMERIC_VERTIVAL_VAL中显示滚动条的位置
GetCtrlVal(panelHandle, PANEL_NUMERIC_VERTICAL_MIN, &value);//获取滚动条最小值
ScrollBar_SetAttribute(panelHandle, PANEL_GRAPH_VERTICAL,ATTR_SB_DOC_MIN, value);
GetCtrlVal(panelHandle, PANEL_NUMERIC_VERTICAL_MAX, &value);//获取滚动条最大值
ScrollBar_SetAttribute(panelHandle, PANEL_GRAPH_VERTICAL,ATTR_SB_DOC_MAX, value);
GetCtrlVal(panelHandle, PANEL_NUMERIC_VERTICAL_HEIG, &value);//获取滚动条高度
ScrollBar_SetAttribute(panelHandle, PANEL_GRAPH_VERTICAL,ATTR_SB_HEIGHT, value);
GetCtrlVal(panelHandle, PANEL_NUMERIC_VERTICAL_WID, &value);//获取滚动条宽度
ScrollBar_SetAttribute(panelHandle, PANEL_GRAPH_VERTICAL,ATTR_SB_WIDTH, value);
GetCtrlVal(panelHandle, PANEL_COLORNUM_COLOR, &value);//获取滚动条颜色
ScrollBar_SetAttribute(panelHandle, PANEL_GRAPH_VERTICAL,ATTR_SB_COLOR, value);
GetCtrlVal(panelHandle, PANEL_TOGGLEBUTTON_MODE, &value);//获取滚动条显示方式
ScrollBar_SetAttribute(panelHandle, PANEL_GRAPH_VERTICAL,ATTR_SB_VERTICAL, value);
GetCtrlVal(panelHandle, PANEL_NUMERIC_VERTICAL_VIEW, &value);//获取滚动条每次滚动大小
ScrollBar_SetAttribute(panelHandle, PANEL_GRAPH_VERTICAL,ATTR_SB_VIEW_SIZE, value);
DisplayPanel (panelHandle);
RunUserInterface ();
DiscardPanel (panelHandle);
return 0;
}
//滚动条回调函数
int CVICALLBACK scrollbarCB (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_SB_UP_BUTTON:
getvalue();
break;
case EVENT_SB_DOWN_BUTTON:
getvalue();
break;
case EVENT_SB_PAGE_UP:
getvalue();
break;
case EVENT_SB_PAGE_DOWN:
getvalue();
break;
case EVENT_SB_THUMB_CHANGE:
getvalue();
break;
case EVENT_SB_COMMIT:
getvalue();
break;
}
return 0;
}
//所有Numeric控件的回调函数
int CVICALLBACK adjustvalue (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
int value;
switch (event)
{
case EVENT_COMMIT:
GetCtrlVal(panelHandle, control, &value);//获取控件值
switch(control) //根据控件名设置滚动条相应属性
{
case PANEL_NUMERIC_VERTICAL_MIN: //滚动条最小值
ScrollBar_SetAttribute(panelHandle, PANEL_GRAPH_VERTICAL,
ATTR_SB_DOC_MIN, value);
break;
case PANEL_NUMERIC_VERTICAL_VAL: //滚动条当前位置值
ScrollBar_SetAttribute(panelHandle, PANEL_GRAPH_VERTICAL,
ATTR_SB_VALUE, value);
break;
case PANEL_NUMERIC_VERTICAL_MAX: //滚动条最大值
ScrollBar_SetAttribute(panelHandle, PANEL_GRAPH_VERTICAL,
ATTR_SB_DOC_MAX, value);
break;
case PANEL_NUMERIC_VERTICAL_HEIG: //滚动条高度
ScrollBar_SetAttribute(panelHandle, PANEL_GRAPH_VERTICAL,
ATTR_SB_HEIGHT, value);
break;
case PANEL_NUMERIC_VERTICAL_WID: //滚动条宽度
ScrollBar_SetAttribute(panelHandle, PANEL_GRAPH_VERTICAL,
ATTR_SB_WIDTH, value);
break;
case PANEL_COLORNUM_COLOR: //滚动条颜色
ScrollBar_SetAttribute(panelHandle, PANEL_GRAPH_VERTICAL,
ATTR_SB_COLOR, value);
break;
case PANEL_TOGGLEBUTTON_MODE: //滚动条显示方式(垂直 水平)
ScrollBar_SetAttribute(panelHandle, PANEL_GRAPH_VERTICAL,
ATTR_SB_VERTICAL, value);
break;
case PANEL_NUMERIC_VERTICAL_VIEW: //滚动条一次滚动的大小
ScrollBar_SetAttribute(panelHandle, PANEL_GRAPH_VERTICAL,
ATTR_SB_VIEW_SIZE, value);
break;
}
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;
}
void getvalue(void)
{
int value;
ScrollBar_GetAttribute(panelHandle, PANEL_GRAPH_VERTICAL, ATTR_SB_VALUE, &value);//获取滚动条当前位置
SetCtrlVal(panelHandle, PANEL_NUMERIC_VERTICAL_VAL, value);//在NUMERIC_VERTIVAL_VAL中显示滚动条的位置
}