LabWindows/CVI虚拟仪器设计技术场景与游戏设计之:时钟制作
但是,这种设置方式重复工作量较大,代码大量冗余,容易出现错误,可以采用循环结构优化代码设计,即主函数中使用的代码:
for (i = 2; i < 14; i ++)
{
SetCtrlAttribute (panelHandle, i, ATTR_TEXT_BGCOLOR, VAL_TRANSPARENT);
}
采用此种代码方式,需要控制每个Text Message 控件的Tab Order 属性,使自动生成的"时钟制作.h"文件控件常量值遵从一定顺序,即:
#include <userint.h>
#ifdef __cplusplus
extern "C" {
#endif
#define
PANEL
1
#define
PANEL_TEXTMSG_1
2
#define
PANEL_TEXTMSG_2
3
#define
PANEL_TEXTMSG_3
4
#define
PANEL_TEXTMSG_4
5
#define
PANEL_TEXTMSG_5
6
#define
PANEL_TEXTMSG_6
7
#define
PANEL_TEXTMSG_7
8
#define
PANEL_TEXTMSG_8
9
#define
PANEL_TEXTMSG_9
10
#define
PANEL_TEXTMSG_10
11
#define
PANEL_TEXTMSG_11
12
#define
PANEL_TEXTMSG_12
13
#define
PANEL_CANVAS
14
#define
PANEL_TIMER
15
#define
PANEL_DECORATION
16
int CVICALLBACK PanelCB(int panel, int event, void *callbackData, int eventData1, int eventData2);
int CVICALLBACK timer(int panel, int control, int event, void *callbackData, int eventData1, int eventData2); #ifdef __cplusplus
}
#endif
①设置方法为,首先打开"时钟制作.uir"文件使其处于编辑状态,选择菜单Edit→Tab Order..., 弹出Edit Tabbing Order 对话框,如图4-5 所示,按顺序依次点击标签,最后点击OK 按钮完成设置,选择菜单File→Save All,保存所有改动,此时头文件中Text Message 控件将更新为以上顺序,方便程序设计。
4-5 Edit Tabbing Order 对话框
② 界面显示问题
在主函数中还调用了Timer 回调函数,其实,如果不是为了界面的美观设计,也可以将以下代码去掉:
timer (panelHandle, PANEL_TIMER, EVENT_TIMER_TICK, NULL, NULL, NULL);
如果不写入此代码,界面刚显示时没有指针,过一会儿指针才显示出来,这主要是由LabWindows/CVI 函数调用机制所决定的,启动面板逻辑要高于控件逻辑。
③ GetSystemTime 函数
以数字形式获得系统时间。需要注意的是,在Windows API 中也包含GetSystemTime 函数,如果在程序中引用了windows.h 头文件而没有引用utility.h 头文件,可能会出现编译错误。函数原型为:int GetSystemTime (int *Hours, int *Minutes, int *Seconds);
*Hours:系统时间中的小时数,取值范围为0~23。
*Minutes :系统时间中的分钟数,取值范围为0~59。
*Seconds:系统时间中的秒数,取值范围为0~59。
④ TimeStr 函数返回8 字节时间字符串,格式为HH:MM:SS(时分秒)。函数原型为:
char *TimeStr (void);
返回值:返回时间字符串指针。
⑤ CanvasDrawLine 函数
在两个确定点之间绘制直线。绘制直线使用的属性包括:ATTR_PEN_COLOR 、ATTR_PEN_MODE 、ATTR_PEN_WIDTH 和ATTR_PEN_STYLE (当线的粗细大于1 个像素时忽略此设置),用SetCtrlAttribute 函数设置。函数原型为:
int CanvasDrawLine (int Panel_Handle, int Control_ID, Point Start, Point End);
Start :绘制点的起始值。Point 为结构体类型,定义为:
typedef struct
{
intx; inty;
} Point;
如果不想定义一个结构体变量,则可采用如下函数:
Point MakePoint (int x, int y);
MakePoint 函数定义一个二维点,其中参数x 和y 分别是X和Y轴坐标。
(4)运行效果图
点击工具栏中的Debug Project 按钮,程序开始运行,其效果如图4-6 所示。
4-6 运行效果图
相关阅读
《虚拟仪器技术,将"软件就是仪器"进行到底!》
LabWindows 虚拟仪器 CVI 时钟 相关文章:
- 用于雷达测试和验证的自动化测试设备(05-15)
- 基于LabWindows的录波分析仪的设计(03-01)
- LabWindows/CVI虚拟仪器设计技术基本控件使用之: Tab 控件(11-13)
- LabWindows/CVI虚拟仪器设计技术场景与游戏设计之: 下雪场景(11-13)
- LabWindows/CVI虚拟仪器设计技术基本控件使用之:回调函数(11-13)
- LabWindows/CVI虚拟仪器设计技术场景与游戏设计之: 打蜜蜂(11-13)