📄 calc.c
字号:
SetCtrlVal (panelHandle, PANEL_STRING_2, str3);//数据显示
mflag=1;
str1[0]='\0';//字符串1清零
flag=3; // 3表示乘法
}
break;
}
return 0;
}
//*********************************************************
int CVICALLBACK cmd_div (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
if((equalflag==1)|(xflag==1))//有等号按下或者清零后第一次运算
{
GetCtrlVal (panelHandle, PANEL_STRING, str1);//从文本显示框获取参数1的值
SetCtrlVal (panelHandle, PANEL_STRING, ""); //输入数据行清空
SetCtrlVal (panelHandle, PANEL_STRING_2, str1);//数据显示
Fmt (&strvalue1, "%f<%s", str1);//将参数1由字符串转化为double型数据,赋给strvalue1
str1[0]='\0';//字符串1清零
flag=4; // 4表示除法
equalflag=0;//之前等号无效
xflag=0;
}
else
{
GetCtrlVal (panelHandle, PANEL_STRING, str1);//取当前文本显示框参数1的值
Fmt (&strvalue6, "%f<%s", str1);//
Fmt (&strvalue7, "%f<%s", str3);//
strvalue7=strvalue7/strvalue6;
Fmt (str3, "%f", strvalue7);
SetCtrlVal (panelHandle, PANEL_STRING_2, str3);//数据显示
mflag=1;
str1[0]='\0';//字符串1清零
flag=4; // 4表示除法
}
break;
}
return 0;
}
//**************开方,百分,倒数后直接显示,不用等号*******************************
int CVICALLBACK cmd_sqrt (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
Delay (1);
GetCtrlVal (panelHandle, PANEL_STRING, str1);//从文本显示框获取参数1的值
Fmt (&strvalue1, "%f<%s", str1); //将参数1由字符串转化为double型数据,赋给strvalue1
if(strvalue1>=0)
{SetCtrlVal (panelHandle, PANEL_STRING, ""); //输入数据行清空
SetCtrlVal (panelHandle, PANEL_STRING_2, str1);//数据显示
str1[0]='\0';
strvalue2=sqrt(strvalue1);//参数1经过开方运算结果赋给参数2strvalue2
Fmt (str2, "%s<%f", strvalue2);//参数2由double型转化为字符型,用于文本显示
SetCtrlVal (panelHandle, PANEL_STRING, str2);
str2[0]='\0';
}
else
{
SetCtrlVal (panelHandle, PANEL_STRING, "输入负数,不能开方");
str1[0]='\0';
}
break;
}
return 0;
}
//*********************************************************
int CVICALLBACK cmd_percent (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
Delay (1);
GetCtrlVal (panelHandle, PANEL_STRING, str1);
Fmt (&strvalue1, "%f<%s", str1);
SetCtrlVal (panelHandle, PANEL_STRING, ""); //输入数据行清空
SetCtrlVal (panelHandle, PANEL_STRING_2, str1);//数据显示
str1[0]='\0';
strvalue2=100*(strvalue1);
Fmt (str2, "%s<%f", strvalue2);
strcat (str2, "%");//连接%用于显示
SetCtrlVal (panelHandle, PANEL_STRING, str2);
str2[0]='\0';
break;
}
return 0;
}
//*********************************************************
int CVICALLBACK cmd_daoshu (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
Delay (1);
GetCtrlVal (panelHandle, PANEL_STRING, str1);
Fmt (&strvalue1, "%f<%s", str1);
SetCtrlVal (panelHandle, PANEL_STRING, ""); //输入数据行清空
SetCtrlVal (panelHandle, PANEL_STRING_2, str1);//数据显示
str1[0]='\0';
strvalue2=1/(strvalue1);
Fmt (str2, "%s<%f", strvalue2);
SetCtrlVal (panelHandle, PANEL_STRING, str2);
str2[0]='\0';
break;
}
return 0;
}
//*********************************************************
int CVICALLBACK cmd_equal (int panel, int control, int event,//按下等号后参数1已经存放于strvalue1中,下面将字符串1输入结果放入strvalue2中
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
equalflag=1;
if(mflag==0)
{
GetCtrlVal (panelHandle, PANEL_STRING, str1);
Fmt (&strvalue2, "%f<%s", str1); //将参数1由字符串转化为double型数据,赋给strvalue2
switch (flag)
{
case 1:
{
strvalue3=strvalue1+strvalue2;
break;
}
case 2:
{
strvalue3=strvalue1-strvalue2;
break;
}
case 3:
{
strvalue3=strvalue1*strvalue2;
break;
}
case 4:
{
strvalue3=strvalue1/strvalue2;
break;
}
default:
break;
}
Fmt (str2, "%f", strvalue3);//将结果由double型转化为字符串数据,赋给str2,用于显示
SetCtrlVal (panelHandle, PANEL_STRING, str2);
strcpy(str3,str2);
str1[0]='\0';
str2[0]='\0';
}
else
{
GetCtrlVal (panelHandle, PANEL_STRING, str1);
Fmt (&strvalue2, "%f<%s", str1); //将参数1由字符串转化为double型数据,赋给strvalue2
Fmt (&strvalue1, "%f<%s", str3);//
switch (flag)
{
case 1:
{
strvalue3=strvalue1+strvalue2;
break;
}
case 2:
{
strvalue3=strvalue1-strvalue2;
break;
}
case 3:
{
strvalue3=strvalue1*strvalue2;
break;
}
case 4:
{
strvalue3=strvalue1/strvalue2;
break;
}
default:
break;
}
Fmt (str2, "%f", strvalue3);//将结果由double型转化为字符串数据,赋给str2,用于显示
SetCtrlVal (panelHandle, PANEL_STRING, str2);
strcpy(str3,str2);
str1[0]='\0';
str2[0]='\0';
mflag=0;
}
break;
}
return 0;
}
//*********************************************************
//计算器的附加存储功能
//*********************************************************
int CVICALLBACK cmd_back (int panel, int control, int event, //后退删除最末数据
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
GetCtrlVal (panelHandle, PANEL_STRING, str1); //获取当前文本框的字符串,
if(str1[0]!='\0')
{
str1[strlen(str1)-1]=0;//最末数据清空
SetCtrlVal (panelHandle, PANEL_STRING, str1);//将处理数据送文本框显示
}
else
{
SetCtrlVal (panelHandle, PANEL_STRING, "0");//全部退完则置0显示
}
break;
}
return 0;
}
//*********************************************************
int CVICALLBACK cmd_ms (int panel, int control, int event, //数据存储到寄存器strvalue4
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
GetCtrlVal (panelHandle, PANEL_STRING, str1);//取得目前显示的数
Fmt (&strvalue4, "%f<%s", str1);//转换为浮点数并存入计算机存储器strvalue4
SetCtrlAttribute (panelHandle, PANEL_TEXTMSG, ATTR_VISIBLE, 1);//将面板上的M 显示出来表示存进
str1[0]='\0';
break;
}
return 0;
}
//*********************************************************
int CVICALLBACK cmd_mr (int panel, int control, int event, //存储到寄存器数据strvalue4读出来显示在文本框
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
Fmt (str4, "%s<%f", strvalue4);
SetCtrlVal (panelHandle, PANEL_STRING, str4);
break;
}
return 0;
}
//*********************************************************
int CVICALLBACK cmd_mc (int panel, int control, int event, //清存储到寄存器数据strvalue4
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
str4[0]='\0';
strvalue4=0;
SetCtrlAttribute (panelHandle, PANEL_TEXTMSG, ATTR_VISIBLE, 0);//将面板上的M 隐藏
break;
}
return 0;
}
//*********************************************************
int CVICALLBACK cmd_mjia (int panel, int control, int event,//将存储到寄存器strvalue4中的数据与当前文本显示数据求和,由MR读取
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
GetCtrlVal (panelHandle, PANEL_STRING, str1);//取得目前显示的数
Fmt (&strvalue5, "%f<%s", str1);
strvalue4=strvalue4+strvalue5;
str1[0]='\0';
break;
}
return 0;
}
//*********************************************************
int CVICALLBACK cmd_mjian (int panel, int control, int event,//将存储到寄存器strvalue4中的数据与当前文本显示数据相减,由MR读取
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
GetCtrlVal (panelHandle, PANEL_STRING, str1);//取得目前显示的数
Fmt (&strvalue5, "%f<%s", str1);
strvalue4=strvalue4-strvalue5;
str1[0]='\0';
break;
}
return 0;
}
//*********************************************************
//菜单项编辑
//*********************************************************
void CVICALLBACK editcopy (int menuBar, int menuItem, void *callbackData,//将文本框中的字符串复制到系统粘贴板
int panel)
{
char strings[50];
GetCtrlVal (panelHandle, PANEL_STRING, strings);
ClipboardPutText (strings); //将字符串拷贝进入系统的剪贴板
}
//*********************************************************
void CVICALLBACK editzhantie (int menuBar, int menuItem, void *callbackData,//将系统粘贴板复制到文本框中
int panel)
{
char *text;
ClipboardGetText (&text, 0);//从剪贴板读取信息
if (text != 0) //存在信息则显示出来
SetCtrlVal (panelHandle, PANEL_STRING, text);
else
SetCtrlVal (panelHandle, PANEL_STRING, "无信息");
}
//*********************************************************
// 界面总是显示在最前面
//*********************************************************
void CVICALLBACK editalwaystop (int menuBar, int menuItem, void *callbackData,// 显示在最前方
int panel)
{
static int topflag;
int val_float;
if (topflag)
{
val_float=VAL_FLOAT_NEVER;
topflag=0;
}
else
{
val_float=VAL_FLOAT_ALWAYS;
topflag=1;
}
// Specifies whether the panel's window floats above all non-floating windows.
SetPanelAttribute (panelHandle, ATTR_FLOATING,val_float );
// 设定菜单项前面是否打勾
SetMenuBarAttribute (menubarhandle, MENUBAR_EDIT_EDITALWATYSTOP, ATTR_CHECKED, topflag);
}
//*********************************************************
void CVICALLBACK editexit (int menuBar, int menuItem, void *callbackData,
int panel)
{
QuitUserInterface (0);
}
//*********************************************************
void CVICALLBACK helpabout (int menuBar, int menuItem, void *callbackData,
int panel)
{
aboutpanelhandle = LoadPanel (panelHandle, "calc.uir", PANEL_ABOU);
DisplayPanel (aboutpanelhandle);
}
//*********************************************************
int CVICALLBACK ok (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
DiscardPanel (aboutpanelhandle);
break;
}
return 0;
}
//*********************************************************
void setvalue (void)
{
SetCtrlVal (panelHandle, PANEL_STRING, "");
SetCtrlVal (panelHandle, PANEL_STRING, str1);
}
//*********************************************************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -