//*****************************************************************************
// Labwindows/cvi8.5 数据格式化
// Fmt 函数的各种用法
// szlihongtao
// 2010-09-08
//*****************************************************************************
#include <cvirte.h>
#include <formatio.h>
#include <userint.h>
#include <utility.h>
#include "fmt.h"
//*****************************************************************************
static int panelHandle;
char Current_Directory[MAX_PATHNAME_LEN];
char String[64];
//*****************************************************************************
int CVICALLBACK cb_2string (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
int temp;
switch (event)
{
case EVENT_COMMIT:
{
GetCtrlVal(panel,control,&temp);
//Fmt(String,"%i",temp);
//Fmt(String,"%s<%i",temp);
/*
[b1], 表明temp为1字节的整数
当输入 24时候,显示为24。
当输入 256时候,显示为0。
当输入 257时候,显示为1
*/
//Fmt(String,"%s<%i[b1]",temp);
/*
[w2], 表明在函数将整数转换为字符串格式的情况下,整数修饰符w 规定将存储字符串的精确字节数
当输入 3时候,显示为 3。注意,前面有1个空格
当输入 56时候,显示为56。
当输入 257时候,显示为*7,表示显示溢出
*/
//Fmt(String,"%s<%i[w2]",temp);
/*
, 表明在函数将整数变量看成有符号的二进制补码。这是默认的整数表示法,因此,函数可以不要 s 修饰符
当输入 -233时候,显示为 -233
当输入 56时候,显示为56。
*/
Fmt(String,"%i",temp);
SetCtrlVal(panel,PANEL_STRING,String);
break;
}
}
return 0;
}
//*****************************************************************************
int CVICALLBACK cb_2string3 (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
double temp;
switch (event)
{
case EVENT_COMMIT:
{
GetCtrlVal(panel,control,&temp);
/*
[e2], 规定数据以科学计数法来表示,n可选,规定指数的数据个数
[p3], 规定数据的精度,如果省了修饰符pn,默认为p6
例如输入122.34,显示为 1.223e+02
*/
//Fmt(String,"%f[e2p3]",temp);
/*
[wn], 规定字符串的精确字节数
[r], 数据四舍五入,默认为截尾
*/
//Fmt(String,"字符串为%f[w6r]",temp);
/*
[r], 数据四舍五入,默认为截尾
例如输入122.374,显示为 122.374,默认小数点右边的数据个数为6位
*/
Fmt(String,"字符串为%f[r]",temp);
SetCtrlVal(panel,PANEL_STRING_3,String);
break;
}
}
return 0;
}
//*****************************************************************************
int CVICALLBACK cb_2int (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
int temp;
switch (event)
{
case EVENT_COMMIT:
{
GetCtrlVal(panel,control,String);
Fmt(&temp,"%i<%s",String);
SetCtrlVal(panel,PANEL_NUMERIC_2,temp);
break;
}
}
return 0;
}
//*****************************************************************************
int CVICALLBACK cb_2double (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
double temp;
switch (event)
{
case EVENT_COMMIT:
{
GetCtrlVal(panel,control,String);
Fmt(&temp,"%f<%s",String);
SetCtrlVal(panel,PANEL_NUMERIC_4,temp);
break;
}
}
return 0;
}
//*****************************************************************************
void init(void)
{
char *ptr;
int Hours, Minutes, Seconds;
int Month, Day, Year;
GetDir(Current_Directory); // Gets the current working directory on the default drive.
SetCtrlVal(panelHandle,PANEL_STRING_GETDIR,Current_Directory); // 在默认驱动器上活动当前的工作目录
cb_2string (panelHandle, PANEL_NUMERIC, EVENT_COMMIT,0, 0, 0);
cb_2string3 (panelHandle, PANEL_NUMERIC_3, EVENT_COMMIT,0, 0, 0);
cb_2int (panelHandle, PANEL_STRING_2, EVENT_COMMIT,0, 0, 0);
cb_2double (panelHandle, PANEL_STRING_4, EVENT_COMMIT,0, 0, 0);
#if 0
ptr=DateStr();
SetCtrlVal(panelHandle,PANEL_STRING_DATE,ptr);
ptr=TimeStr();
SetCtrlVal(panelHandle,PANEL_STRING_TIME,ptr);
#else
GetSystemDate (&Month, &Day, &Year);
Fmt(String,"%i[w4p0]年%i[w2p0]月%i[w2p0]日",Year,Month,Day);
SetCtrlVal(panelHandle,PANEL_STRING_DATE,String);
GetSystemTime (&Hours, &Minutes, &Seconds);
Fmt(String,"%i[w2p0]:%i[w2p0]:%i[w2p0]",Hours,Minutes,Seconds);
SetCtrlVal(panelHandle,PANEL_STRING_TIME,String);
#endif
}
//*****************************************************************************
int main (int argc, char *argv[])
{
if (InitCVIRTE (0, argv, 0) == 0)
return -1; /* out of memory */
if ((panelHandle = LoadPanel (0, "fmt.uir", PANEL)) < 0)
return -1;
init();
DisplayPanel (panelHandle);
RunUserInterface ();
DiscardPanel (panelHandle);
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;
}
//*****************************************************************************
//*****************************************************************************
//*****************************************************************************
用户377235 2015-11-26 16:06
用户1667182 2012-12-3 11:15