自己动手开发计算器
来源:互联网 发布:最难搞定的星座知乎 编辑:程序博客网 时间:2024/04/30 10:20
我在上一篇博客中已经教了大家在VC6.0中安装了 Win32 DialogBased Application 开发向导,今天我将叫大家使用Win32 DialogBased Application开发Windows程序中的简单的程序员计算器
在制作之前先给大家看一下效果
主界面
用程序员计算器计算 11*12
打开程序员计算器
用鼠标点击键盘上的1点两下
点击*然后再点击一下1一下2
最后点击等号,得到计算结果
制作程序员计算器
打开VC6.0--->选择 Win32 Dialog Based Application --->输入工程名为:程序员计算器-->单击确定--->选择ResourceView---->选择Resource Resource文件夹---->选择Dialog---->选择 IDD_MAIN
操作完成后会出现如下图所示的界面
修改程序的名字;将程序的名字改为<<<程序员计算器>>>
在对话框上单击右键----->选择属性------>标题改为<<<程序员计算器>>>
未修改
修改
添加最小化选择项
在对话框上双击----->弹出对话框的属性选项对话框----->选择样式----->勾上最小化框
弹出属性选项对话框并且选择样式
选择样式
在最小化框前打钩
修改编辑框控件中的文本排列方式
在编辑框控件上单击右键----->选择属性------>------>样式------>排列文本选择为靠右
在编辑框控件上单击右键弹出编辑框的属性界面
选择样式
在排列文本选项中选择靠右
控件库
选择一个编辑框控件并拖到对话框上,并且调整好位置和大小
按照上面的方法先对话框上放一些按钮,并将标题改成数字或者符号
修改控件的ID:
选择一个按钮---->右击---->属性--->常规---->将清零按钮的ID改为IDC_CLEAR
选择按钮右击选择属性弹出属性对话框
修改ID
注:双击右键也可以弹出属性对话框
按照上面的方法将所有的按钮的ID都修改一下
添加图标:
添加前:
添加后
添加步骤:
ResourceView---->resource resource----->选定 resource resource ------>单击右键----->引入---选择一个图标(.icon图片)
添加图标成功的标志
界面搭建完成后,做完所有的准备工作后开始写代码
在写代码之前我们的学习几个函数
函数名:strcat
函数按功能:连接两个字符串
函数原型:extern char *strcat(char *dest,char *src);
参数:
dest 第一个字符串的地址
src 第二个字符串的地址
应用:利用 strcat函数实现hello 与 world 的连接
#include <stdio.h>#include <string.h>int main(){char str1[] = "hello";char str2[] = " world";strcat(str1,str2);printf("%s\n",str1);return 0;}
执行结果
函数名:memset
函数原型:void *memset(void *s, int ch, size_t n)
函数功能:将s中前n个字节 (typedef unsigned int size_t)用 ch 替换并返回 s
参数:
s 空指针
ch 整型数据
n s的大小
应用:利用memset实现清零
#include <stdio.h>#include <string.h>int main(){char str[] = "hello world";memset(str,0,sizeof(str));printf("%s\n",str);return 0;}
执行结果
函数名:strcpy
函数原型:extern char *strcpy(char* dest, const char *src)
函数功能:实现字符串的复制
参数:
dest 字符指针
src 字符指针
应用: 复制hello world
#include <stdio.h>#include <string.h>int main(){char str1[20] = "hello world";char str2[20];strcpy(str2,str1);printf("%s\n",str2);return 0;}
执行结果
函数名: atoi
函数原型:int atoi(const char *nptr);
函数功能: 将字符串转换成整数
应用
#include <stdio.h>#include <stdlib.h>int main(){char str1[20] = "12345";int i = atoi(str1);printf("%d\n",i);return 0;}
执行结果
函数名:itoa
函数原型: char
*itoa(
int
value,
char
*string,
int
radix)
函数功能:将整数转换成字符串
参数:
value 整数值
string 字符串
radix 进制
应用将123转换成 十进制 二进制 八进制 十六进制
#include <stdio.h>#include <stdlib.h>int main(){int num = 123;char str[10];itoa(num,str,2);printf("二进制:%s\n",str);itoa(num,str,8);printf("八进制:%s\n",str);itoa(num,str,10);printf("十进制:%s\n",str);itoa(num,str,16);printf("十六进制%s\n",str);return 0;}
运行结果
函数名:sprintf
函数原型:int sprintf( char *buffer, const char *format, [ argument] … )
函数功能:将数据打印到字符串中
参数:
buffer 解释打印的字符串
format 打印格式
第三个参数 打印的数据
应用:将 hello world 打印到字符串中
#include <stdio.h>#include <string.h>int main(){char str[20];sprintf(str,"%s","hello world !");printf("%s\n",str);return 0;}
执行结果:
函数名: GetDlgItemText
函数功能:得到控件中的文本
函数原型:
UINT WINAPI GetDlgItemText(
_In_ HWND hDlg,
_In_ int nIDDlgItem,
_Out_ LPTSTR lpString,
_In_ int nMaxCount
);
参数:
第一个参数:程序的句柄
第二个参数:控件的ID
第三个参数:字符串
第四个参数:字符串的大小
参考文章:GetDlgItemTex函数
函数名:SetDlgItemTex
函数功能:向控件中写入文本
函数参数:
BOOL WINAPI SetDlgItemText(
_In_ HWND hDlg,
_In_ int nIDDlgItem,
_In_ LPCTSTR lpString
)
参数:
第一个参数:程序的句柄
第二个参数:控件的ID
第三参数:字符串
参考文章:SetDlgItemText函数
函数名:SendMessage
函数功能:发送Windows信息
函数原型:
LRESULT WINAPI SendMessage(
_In_ HWND hWnd,
_In_ UINT Msg,
_In_ WPARAM wParam,
_In_ LPARAM lParam
);
第一个参数:窗口的句柄
第二个参数:发送的Windows信息
第三个参数:指定附加的消息特定信息
第四个参数:指定附加的消息特定信息。
参考文章:SendMessage函数
函数名:LoadIcon
函数功能:加载图标
函数原型:
HICON WINAPI LoadIcon(
_In_opt_ HINSTANCE hInstance,
_In_ LPCTSTR lpIconName
);
第一个参数:程序的实例句柄
第二个参数:图标的ID
参考文章:LoadIcon函数
函数名:ZeroMemory
函数功能:清零
函数原型:
void ZeroMemory(
[in] PVOID Destination,
[in] SIZE_T Length
);
第一个参数:数据的地址
第一个参数:数据的大小
参考文章:ZeroMemory函数
学完函数的使用后现在开始写代码:
FileView------->工作区程序员计算器------>程序员计算器 file------->Source file----->MainDlg.cpp
程序员计算器的全部代码
在写代码之前先学习几个算法
1清零算法
memset(temp,0,sizeof(temp)); SetDlgItemText(hwnd,IDC_EDIT1,"0");
2退格算法
TCHAR temp1[256]; GetDlgItemText(hwnd,IDC_EDIT1,temp1,sizeof(temp1));/*获得编辑框中的字符串*/ temp1[strlen(temp1) - 1] = temp1[strlen(temp1)];/*将'\0'向前移一位*/ strcpy(temp,temp1); SetDlgItemText(hwnd,IDC_EDIT1,temp);/*输出结果*/
MainDlg.cpp中的代码
#include "stdafx.h"#include <windows.h>#include <windowsx.h>#include "resource.h"#include "MainDlg.h"TCHAR str1[256];/*存取第一个数字*/TCHAR str2[256];/*存取第二个数字*/TCHAR str3[256];/*存取运算结果*/TCHAR temp[256]; /*存取输入的数字*/char op;/*用于开关语句中选择运算符号*/float f1,f2,f3;TCHAR binary[256];/*用于进制转换*/int i;/*用于进制转换*/int p,q;/*用于按位取反*/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;}BOOL Main_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam){ZeroMemory(str1,sizeof(str1));/*清零*/ZeroMemory(str2,sizeof(str2));/*清零*/SetDlgItemText(hwnd,IDC_EDIT1,"0");/*文本框中显示0*//*在窗口的标题栏上显示图标*/SendMessage(hwnd, WM_SETICON, ICON_SMALL, (LPARAM)LoadIcon(GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_ICON1))); return TRUE;}void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify){ switch(id) { case IDC_1:/*输入数字1*/ { strcat(temp,"1"); SetDlgItemText(hwnd,IDC_EDIT1,temp); } break; case IDC_2:/*输入数字2*/ { strcat(temp,"2"); SetDlgItemText(hwnd,IDC_EDIT1,temp); } break; case IDC_3:/*输入数字3*/{ strcat(temp,"3"); SetDlgItemText(hwnd,IDC_EDIT1,temp);} break; case IDC_4:/*输入数字4*/ { strcat(temp,"4"); SetDlgItemText(hwnd,IDC_EDIT1,temp); } break; case IDC_5:/*输入数字5*/ { strcat(temp,"5"); SetDlgItemText(hwnd,IDC_EDIT1,temp); } break; case IDC_6:/*输入数字6*/{ strcat(temp,"6"); SetDlgItemText(hwnd,IDC_EDIT1,temp);} break; case IDC_7:/*输入数字7*/ { strcat(temp,"7"); SetDlgItemText(hwnd,IDC_EDIT1,temp); } break; case IDC_8:/*输入数字8*/ { strcat(temp,"8"); SetDlgItemText(hwnd,IDC_EDIT1,temp); } break; case IDC_9:/*输入数字9*/{ strcat(temp,"9"); SetDlgItemText(hwnd,IDC_EDIT1,temp);} break; case IDC_0:/*输入数字0*/ { strcat(temp,"0"); SetDlgItemText(hwnd,IDC_EDIT1,temp); } break; case IDC_POINT:/*输入小数点*/ { strcat(temp,"."); SetDlgItemText(hwnd,IDC_EDIT1,temp); } break; case IDC_ADD:/*加*/ { op = '+'; strcpy(str1,temp); memset(temp,0,sizeof(temp)); } break; case IDC_SUB:/*减*/ { op = '-'; strcpy(str1,temp); memset(temp,0,sizeof(temp)); } break; case IDC_MUL:/*乘*/ { op = '*'; strcpy(str1,temp); memset(temp,0,sizeof(temp)); } break; case IDC_DIV:/*除*/ { op = '/'; strcpy(str1,temp); memset(temp,0,sizeof(temp)); } break; case IDC_CLEAR:/*清零*/ { memset(temp,0,sizeof(temp)); SetDlgItemText(hwnd,IDC_EDIT1,"0"); } break; case IDC_BACK:/*退格*/ { TCHAR temp1[256]; GetDlgItemText(hwnd,IDC_EDIT1,temp1,sizeof(temp1));/*获得编辑框中的字符串*/ temp1[strlen(temp1) - 1] = temp1[strlen(temp1)];/*将'\0'向前移一位*/ strcpy(temp,temp1); SetDlgItemText(hwnd,IDC_EDIT1,temp);/*输出结果*/ } break; case IDC_TWO:/*转换为二进制*/ { i = atoi(temp); itoa(i,binary,2); SetDlgItemText(hwnd,IDC_EDIT1,binary); } break; case IDC_EIGHT:/*转换为八进制*/ { i = atoi(temp); itoa(i,binary,8); SetDlgItemText(hwnd,IDC_EDIT1,binary); } break; case IDC_SIXTEEN:/*转换为十六进制*/ { i = atoi(temp); itoa(i,binary,16); SetDlgItemText(hwnd,IDC_EDIT1,binary); } break; case IDC_AND:/*按位与*/ { op = '&'; strcpy(str1,temp); memset(temp,0,sizeof(temp)); } break; case IDC_VERSA:/*按位取反*/ { p = atoi(temp); memset(temp,0,sizeof(temp)); q = ~p; wsprintf(str3,"%d",q); SetDlgItemText(hwnd,IDC_EDIT1,str3); } break; case IDC_OR:/*按位或*/ { op = '|'; strcpy(str1,temp); memset(temp,0,sizeof(temp)); } break; case IDC_UNNO:/*按位异或*/ { op = '^'; strcpy(str1,temp); memset(temp,0,sizeof(temp)); } break; case IDC_LEFT:/*按位左移*/ { op = '<'; strcpy(str1,temp); memset(temp,0,sizeof(temp)); } break; case IDC_RIGHT:/*按位右移*/ { op = '>'; strcpy(str1,temp); memset(temp,0,sizeof(temp)); } break; case IDC_OK:/*等于*/ { f1 = atof(str1); strcpy(str2,temp); f2 = atof(str2); switch(op) { case '+': { f3 = f1 + f2; } break; case '-': { f3 = f1 - f2; } break; case '*': { f3 = f1 * f2; } break; case '/': { f3 = f1 / f2; } break; case '&': { f3 = (int)f1 & (int)f2; } break; case '|': { f3 = (int)f1 | (int)f2; } break; case '^': { f3 = (int)f1 ^ (int)f2; } break; case '<': { f3 = (int)f1 << (int)f2; } break; case '>': { f3 = (int)f1 >> (int)f2; } break; } sprintf(str3,"%g",f3); SetDlgItemText(hwnd,IDC_EDIT1,str3); } break; default:break; }}void Main_OnClose(HWND hwnd){ EndDialog(hwnd, 0);}
程序员计算器下载
- 自己动手开发计算器
- 自己动手写计算器V1.0
- 自己动手写计算器V1.1
- 自己动手写计算器V1.2
- Windows编程原理及自己动手写计算器
- 计算器开发
- 自己动手开发jQuery插件
- 自己动手开发jQuery插件
- 自己动手开发jQuery插件
- 自己动手JQuery插件开发
- 自己动手开发jQuery插件
- 自己动手开发IOC容器
- 自己动手开发jQuery插件
- 自己动手开发编译器
- 自己动手开发emlog插件
- 自己动手开发安卓版按键精灵
- 自己动手开发网络服务器
- 自己动手写操作系统 开发工具
- 控件命名规则
- NSString和NSDate互转需要用到NSDateFormatter
- 计算文件夹下文件的总大小
- 存在
- PHP CGI,FastCGI,PHP-CGI与PHP-FPM web server http server
- 自己动手开发计算器
- ReOrder list 链表 重排序
- mysql join+order by view 优化
- Nutch 教程
- 黑马程序员------- 交通灯管理系统 -------
- 公司制定的Java代码规范
- windows station和desktop
- 插入排序
- Java/Android开发规范——变量和常量命名