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

📄 calc.c

📁 CVI计算器
💻 C
📖 第 1 页 / 共 2 页
字号:
//*********************************************************
// Labwindows/cvi2009 实现了计算器的基本功能
//*********************************************************
#include <utility.h>
#include <formatio.h>
#include <ansi_c.h>			    
#include <cvirte.h>
#include <userint.h>
#include "toolbox.h"
#include "calc.h"
//*********************************************************
static int panelHandle,aboutpanelhandle;
static int menubarhandle;

static char str1[20];	   	// 参数1的字符串
static char str2[20];    	// 参数2的字符串
static char str3[20]; 
static char str4[20]; 
static double strvalue1;	// 参数1的值
static double strvalue2;	// 参数2的值
static double strvalue3;	// 运算结果
static double strvalue4;	// 计算器存储用变量
static double strvalue5;	// 粘贴板用变量
static double strvalue6;	//
static double strvalue7;	//
static int flag;			// 加减乘除的标志
static int equalflag=1;		// 输完2个数后是否按下“=”标志
static int mflag;
static int xflag=1; 
int i;
//*********************************************************
void setvalue (void);
//*********************************************************
int main (int argc, char *argv[])
{
	if (InitCVIRTE (0, argv, 0) == 0)
		return -1;	/* out of memory */
	if ((panelHandle = LoadPanel (0, "calc.uir", PANEL)) < 0)
		return -1;
	DisplayPanel (panelHandle);

	menubarhandle = GetPanelMenuBar (panelHandle);   //获取菜单栏的句柄
	
	RunUserInterface ();
	DiscardPanel (panelHandle);
	return 0;
}
//*********************************************************
								 
// 面板的函数
//*********************************************************
int CVICALLBACK panelcb (int panel, int event, void *callbackData,
		int eventData1, int eventData2)
{
	switch (event)
	{
		case EVENT_RIGHT_CLICK:	  // 弹出式的菜单
			RunPopupMenu (menubarhandle, MENUBAR_EDIT, panelHandle, eventData1, eventData2, 0, 0, 0, 0);
			break;
		case EVENT_CLOSE:
			QuitUserInterface (0);
			break;
	}
	return 0;
}
//*********************************************************
//清显示

int CVICALLBACK cmd_ce (int panel, int control, int event,
		void *callbackData, int eventData1, int eventData2)
{
	switch (event)
	{
		case EVENT_COMMIT:
		 SetCtrlVal (panelHandle, PANEL_STRING, "0");
		 SetCtrlVal (panelHandle, PANEL_STRING_2, "0");
			break;
	}
	return 0;
}

//*********************************************************
//清字符串 
int CVICALLBACK clear (int panel, int control, int event,  
		void *callbackData, int eventData1, int eventData2)
{
	switch (event)
	{
		case EVENT_COMMIT:
		{
			str1[0]='\0';
			str2[0]='\0';
			str3[0]='\0';
			strvalue1=0;
			strvalue2=0;
			strvalue3=0;
			strvalue4=0;
			strvalue5=0;
			strvalue6=0;
			strvalue7=0;
			flag=0;
			equalflag=0;
			mflag=0;
			xflag=1;//清零或启动后第一次运算的标志
			SetCtrlVal (panelHandle, PANEL_STRING, "0");
			SetCtrlVal (panelHandle, PANEL_STRING_2, "0");
			break;
		}
	}
	return 0;
}
//********************************************************* 
//按键输入
//*********************************************************
int CVICALLBACK cmd_0 (int panel, int control, int event,
		void *callbackData, int eventData1, int eventData2)
{
	char labeltext[2];
	switch (event)
	{
		case EVENT_COMMIT:
			GetCtrlAttribute (panelHandle, PANEL_CMD_0, ATTR_LABEL_TEXT, labeltext);// 读取控件的标题显示值
			strcat (str1, labeltext);// 字符串连接,将此数值控件的标题显示值加到参数1的后面
			setvalue ();//显示文本框显示实时的参数1
			break;
	}
	return 0;
}
//*********************************************************
int CVICALLBACK cmd_1 (int panel, int control, int event,
		void *callbackData, int eventData1, int eventData2)
{
	char labeltext[2];
	switch (event)
	{
		case EVENT_COMMIT:
			GetCtrlAttribute (panelHandle, PANEL_CMD_1, ATTR_LABEL_TEXT, labeltext);
			strcat (str1, labeltext);
			setvalue ();
			break;
	}
	return 0;
}
//*********************************************************
int CVICALLBACK cmd_2 (int panel, int control, int event,
		void *callbackData, int eventData1, int eventData2)
{
	char labeltext[2];
	switch (event)
	{
		case EVENT_COMMIT:
			GetCtrlAttribute (panelHandle, PANEL_CMD_2, ATTR_LABEL_TEXT, labeltext);
			strcat (str1, labeltext);
			setvalue ();
			break;
	}
	return 0;
}
//*********************************************************
int CVICALLBACK cmd_3 (int panel, int control, int event,
		void *callbackData, int eventData1, int eventData2)
{
	char labeltext[2];
	switch (event)
	{
		case EVENT_COMMIT:
			GetCtrlAttribute (panelHandle, PANEL_CMD_3, ATTR_LABEL_TEXT, labeltext);
			strcat (str1, labeltext);
			setvalue ();
			break;
	}
	return 0;
}
//*********************************************************
int CVICALLBACK cmd_4 (int panel, int control, int event,
		void *callbackData, int eventData1, int eventData2)
{
	char labeltext[2];
	switch (event)
	{
		case EVENT_COMMIT:
			GetCtrlAttribute (panelHandle, PANEL_CMD_4, ATTR_LABEL_TEXT, labeltext);
			strcat (str1, labeltext);
			setvalue ();
			break;
	}
	return 0;	        
}
//*********************************************************
int CVICALLBACK cmd_5 (int panel, int control, int event,
		void *callbackData, int eventData1, int eventData2)
{
	char labeltext[2];
	switch (event)
	{
		case EVENT_COMMIT:
			GetCtrlAttribute (panelHandle, PANEL_CMD_5, ATTR_LABEL_TEXT, labeltext);
			strcat (str1, labeltext);
			setvalue ();
			break;
	}
	return 0;
}
//*********************************************************
int CVICALLBACK cmd_6 (int panel, int control, int event,
		void *callbackData, int eventData1, int eventData2)
{
	char labeltext[2];
	switch (event)
	{
		case EVENT_COMMIT:
			GetCtrlAttribute (panelHandle, PANEL_CMD_6, ATTR_LABEL_TEXT, labeltext);
			strcat (str1, labeltext);
			setvalue ();
			break;
	}
	return 0;
}
//*********************************************************
int CVICALLBACK cmd_7 (int panel, int control, int event,
		void *callbackData, int eventData1, int eventData2)
{
	char labeltext[2];
	switch (event)
	{
		case EVENT_COMMIT:
		{   
			GetCtrlAttribute (panelHandle, PANEL_CMD_7, ATTR_LABEL_TEXT, labeltext); 
		
			strcat (str1, labeltext);
			setvalue ();
			break;
		}
	}
	return 0;
}
//*********************************************************
int CVICALLBACK cmd_8 (int panel, int control, int event,
		void *callbackData, int eventData1, int eventData2)
{
	char labeltext[2];
	switch (event)
	{
		case EVENT_COMMIT:
			GetCtrlAttribute (panelHandle, PANEL_CMD_8, ATTR_LABEL_TEXT, labeltext);
			strcat (str1, labeltext);
			setvalue ();
			break;
	}
	return 0;
}
//*********************************************************
int CVICALLBACK cmd_9 (int panel, int control, int event,
		void *callbackData, int eventData1, int eventData2)
{
	char labeltext[2];
	switch (event)
	{
		case EVENT_COMMIT:
			GetCtrlAttribute (panelHandle, PANEL_CMD_9, ATTR_LABEL_TEXT, labeltext);
			strcat (str1, labeltext);
			setvalue ();
			break;
	}
	return 0;
}
//*********************************************************
int CVICALLBACK cmd_dot (int panel, int control, int event,
		void *callbackData, int eventData1, int eventData2)
{
	char labeltext[2];
	switch (event)
	{
		case EVENT_COMMIT:
			GetCtrlAttribute (panelHandle, PANEL_CMD_DOT, ATTR_LABEL_TEXT, labeltext);
			strcat (str1, labeltext);
			setvalue ();
			break;
	}
	return 0;
}
/*//			if(equalflag==0)
//			{
//			strvalue4=strvalue4+strvalue1;
//			Fmt (str4, "%s<%f", strvalue4); 
//			SetCtrlVal (panelHandle, PANEL_STRING, str4); 
//			
//			 }*/
//*********************************************************
int CVICALLBACK cmd_plus (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=1;	// 1表示加法
			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=1;	// 1表示加法
		   }
			break;
		}
	}
	return 0;
}
//*********************************************************
int CVICALLBACK cmd_minus (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=2;	// 2表示减法
			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=2;	// 2表示减法
		   }
			break;
	}
	return 0;
}
//*********************************************************
int CVICALLBACK cmd_mul (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=3;	// 3表示乘法
			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);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -