计算器V1.0的截图:
下面给出了部分源码:
//windows程序的主函数,调用ID为IDD_MAIN的对话框,对话框的处理函数为Main_Proc;
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
//Enable IPAddress、Calendar.etc
InitCommonControls();
DialogBox(hInstance, MAKEINTRESOURCE(IDD_MAIN),
NULL, Main_Proc);
return 0;
}
//消息处理函数中处理三条消息,初始化,命令和关闭,当程序运行时触发WM_INITDIALOG消息
//调用Main_OnInitDialog对对话框进行初始化;当触发WM_COMMAND消息(如按下按钮)时调用
//Main_OnCommand函数;当选择关闭按钮时触发WM_CLOSE消息,嗲用Main_OnClose函数关闭对话框
BOOL WINAPI Main_Proc(HWND hWnd, UINT uMsg, WPARAM wParam,
LPARAM lParam)
{
switch(uMsg)
{
HANDLE_MSG(hWnd, WM_INITDIALOG, Main_OnInitDialog);
HANDLE_MSG(hWnd, WM_COMMAND, Main_OnCommand);
HANDLE_MSG(hWnd,WM_CLOSE, Main_OnClose);
}
return
FALSE;
}
//Main_OnCommand()处理命令消息
void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT
codeNotify)
{
switch(id)
{
case IDC_BIN0://数字0的输入
{
strcat(result,"0");//在字符串result后连接字符串“0”
SetDlgItemText(hwnd,IDC_EDIT1,result);
}
break;
case IDC_BIN1://数字的输入
{
strcat(result,"1");
SetDlgItemText(hwnd,IDC_EDIT1,result);
}
break;
. . . . .
. . . . .
. . . . .
case IDC_BINB://退格
{
char resulttemp[256];
strcpy(resulttemp,result);
ZeroMemory(result,sizeof(result)/sizeof(TCHAR));//ZeroMemory宏用0来填充一块内存区域
if(0==(strlen(resulttemp)-1))//如果长度为0,表示全删完了
{
SetDlgItemText(hwnd,IDC_EDIT1,TEXT("0"));//z在ID位IDC_EDIT1的编辑控件中显示字符串“0”
break;
}
strncpy(result,resulttemp,strlen(resulttemp)-1);
ZeroMemory(resulttemp,sizeof(resulttemp)/sizeof(TCHAR));
SetDlgItemText(hwnd,IDC_EDIT1,result);
}
break;
case IDC_BINDOT://输入小数点
{
if(NULL==strchr(result,'.'))//用strchr查找字符‘.’在result中出现的位置,若无则在result后
//连接,否则按钮“.”无效果
{
strcat(result,".");
SetDlgItemText(hwnd,IDC_EDIT1,result);
}
}
break;
case IDC_BINADD://加法运算,调用Main_Count(hwnd);来计算,并设置计算索引sel
{
Main_Count(hwnd);
sel=1;
}
break;
.........
.........
.........
case
IDC_BINSIN://sin函数只要一个数,所以先设置计算索引,再调用Main_Count(hwnd)来计算
{
sel=5;
Main_Count(hwnd);
}
break;
.........
.........
.........
default:
break;
}
}
//实现计算方法
void Main_Count(HWND hwnd)
{
num=atof(result);
ZeroMemory(result,sizeof(result)/sizeof(TCHAR));//用0填充内存区域;
switch(sel)//sel为计算索引,实现不同的计算
{
case 1:
{
numtemp+=num;
gcvt(numtemp,10,numstr);
ZeroMemory(result,sizeof(result)/sizeof(TCHAR));
SetDlgItemText(hwnd,IDC_EDIT1,numstr);
}
break;
.........
.........
.........
Mai case 6:
{
numtemp=asin(num)*180/3.1415926535898;
gcvt(numtemp,10,numstr);//实型转换为字符型并存到numstr中
ZeroMemory(result,sizeof(result)/sizeof(TCHAR));
SetDlgItemText(hwnd,IDC_EDIT1,numstr);
}
break;
.........
.........
.........
default:
numtemp=num;
break;
}
}