⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 calc.c

📁 CVI计算器
💻 C
📖 第 1 页 / 共 2 页
字号:
			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 + -