Labwindows/CVI是一个非常强大的上位机设计软件,本文主要介绍Labwindows/CVI文本框(textbox)控件的基本方法:如何把信息在textbox中显示。与之前的文章相似,本次将依然通过一个完成一个简单工程项目的形式来介绍textbox的使用方法。本次工程主要实现以下几个目标:
1.ok按钮按下后在textbox上显示固定的信息 “hello world”
2.更新时间按钮按下后在textbox上显示当前电脑的系统时间
3.查询日期按钮按下后在弹出一个弹出弹窗并在上面显示当前系统日期
4.清楚文本框按钮按下后清除两文本框里的所有内容
1.面板设置
根据上述的工程要求创建如下面板,并将面板和控件头文件添加到工程文件中(如果对相关操作不了解,请查看Labwindows/CVI基础教程(1))
随后生成整体代码框架并编写相关回调函数代码。
2.代码详解
在textbox上打印信息,可以使用 SetCtrlVal函数实现,但是要注意的是在打印变量前要先将变量转换为char类型,系统时间和系统日期的获得可以使用 GetSystemTime 和 GetSystemDate函数来获得,清除textbox上的信息可以用 DeleteTextBoxLines 函数实现,弹出信息框的操作可以用 MessagePopup 函数实现。具体如何使用已在下面的工程代码中给出注释。
#include <utility.h>
#include <ansi_c.h>
#include <cvirte.h>
#include <userint.h>
#include "textbox.h"
static int panelHandle;
int main (int argc, char *argv[])
{
if (InitCVIRTE (0, argv, 0) == 0)
return -1; /* out of memory */
if ((panelHandle = LoadPanel (0, "textbox.uir", PANEL)) < 0)
return -1;
DisplayPanel (panelHandle);
RunUserInterface ();
DiscardPanel (panelHandle);
return 0;
}
int CVICALLBACK p_exit (int panel, int event, void *callbackData,
int eventData1, int eventData2)
{
switch (event)
{
case EVENT_GOT_FOCUS:
break;
case EVENT_LOST_FOCUS:
break;
case EVENT_CLOSE:
QuitUserInterface (0);
break;
}
return 0;
}
int CVICALLBACK display_date (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{ char date[12];
int y,m,d;
switch (event)
{
case EVENT_COMMIT:
GetSystemDate (&m, &d, &y); //获取系统日期
memset(date,0,12); //初始化字符串date
sprintf(date,"%02d-%02d-%02d",y,m,d); //将获取到的系统时间转换成字符串存到date中
MessagePopup ("当前日期", date); // 弹出一个名为当前日期的文本框,并在里面打印出date
break;
}
return 0;
}
int CVICALLBACK display (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
DeleteTextBoxLines (panelHandle, PANEL_TEXTBOX_0, 0, -1); //清空文本框
SetCtrlVal (panelHandle, PANEL_TEXTBOX_0,"hello world" ); //将hello world 写入textbox0
break;
}
return 0;
}
int CVICALLBACK display_time (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
int h,m,s;
char time[20];
switch (event)
{
case EVENT_COMMIT:
DeleteTextBoxLines (panelHandle, PANEL_TEXTBOX_1, 0, -1); //清空文本框
GetSystemTime (&h, &m, &s); //获取系统时间
memset(time,0,20); //初始化字符串time
sprintf(time,"%02d : %02d : %02d",h,m,s); //将获取到的系统时间转换成字符串存到time中
SetCtrlVal (panelHandle, PANEL_TEXTBOX_1,time); //将时间写入文本框
break;
}
return 0;
}
int CVICALLBACK CLR_TEXT(int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
DeleteTextBoxLines (panelHandle, PANEL_TEXTBOX_0, 0, -1);
DeleteTextBoxLines (panelHandle, PANEL_TEXTBOX_1, 0, -1);
break;
}
return 0;
}