在win32工程下做计算器
windows 计算器 命令参数

windows 计算器命令参数摘要:1.引言2.Windows 计算器的概述3.Windows 计算器的命令参数4.命令参数的应用示例5.结论正文:【引言】在现代计算机技术中,计算器是一种必不可少的工具。
而在众多的计算器软件中,Windows 计算器以其强大的功能和便捷性深受用户喜爱。
本文将对Windows 计算器的命令参数进行介绍,帮助用户更好地掌握这一工具。
【Windows 计算器的概述】Windows 计算器是微软公司推出的一款计算器软件,内置于Windows 操作系统中。
它具有简单易用的界面,可以进行各种复杂的数学运算,满足用户的日常计算需求。
除了基本的加减乘除运算,Windows 计算器还支持科学计算、程序设计、统计学等多种功能。
【Windows 计算器的命令参数】Windows 计算器的命令参数是一种用于定制计算过程的方式。
通过在计算器中输入特定的命令和参数,用户可以实现更复杂的计算。
以下是一些常用的Windows 计算器命令参数:1./:用于输入分数,例如输入“3/2”将得到1.5。
2.^:用于表示乘方,例如输入“2^3”将得到8。
3.*:用于表示乘法,例如输入“2*3”将得到6。
4.+:用于表示加法,例如输入“2+3”将得到5。
5.-:用于表示减法,例如输入“2-3”将得到-1。
6./:用于表示除法,例如输入“6/3”将得到2。
7.%:用于表示取余,例如输入“6%3”将得到0。
【命令参数的应用示例】以下是一些使用Windows 计算器命令参数的示例:1.计算平方根:输入“sqrt(25)”,得到结果为5。
2.计算绝对值:输入“abs(-5)”,得到结果为5。
3.计算倒数:输入“1/2”,得到结果为0.5。
4.计算乘方:输入“2^3”,得到结果为8。
5.计算三角函数:输入“sin(30)”,得到结果为0.5。
【结论】总之,Windows 计算器作为一种实用的工具,其命令参数功能为用户提供了更加灵活、高效的计算方式。
如何用Python实现一个简单的计算器

如何用Python实现一个简单的计算器Python是一种高级编程语言,它的简洁语法和丰富的内置函数使它非常适合用来实现各种应用程序,包括简单的计算器。
在这篇文章中,我将向您展示如何使用Python编写一个简单的计算器。
首先,我们需要了解计算器的基本功能。
一个简单的计算器通常具有加法、减法、乘法和除法等基本运算。
因此,我们需要编写函数来执行这些运算。
接下来,我们需要编写一个循环,使得用户可以重复使用计算器,直到他们选择退出。
下面是一个实现上述功能的示例代码:```pythondef add(x, y):"""加法运算"""return x + ydef subtract(x, y):"""减法运算"""return x - ydef multiply(x, y):"""乘法运算"""return x * ydef divide(x, y):"""除法运算"""return x / ywhile True:print("选择您想要执行的操作:") print("1.加法")print("2.减法")print("3.乘法")print("4.除法")print("5.退出")choice = input("输入您的选择(1/2/3/4/5): ")if choice == '5':print("感谢使用计算器!再见!")breaknum1 = float(input("输入第一个数字: "))num2 = float(input("输入第二个数字: "))if choice == '1':print(num1, "+", num2, "=", add(num1, num2))elif choice == '2':print(num1, "-", num2, "=", subtract(num1, num2)) elif choice == '3':print(num1, "*", num2, "=", multiply(num1, num2)) elif choice == '4':if num2 == 0:print("错误:除数不能为0!")else:print(num1, "/", num2, "=", divide(num1, num2))else:print("无效的输入,请重新选择!")```在这段代码中,我们首先定义了四个函数来执行加法、减法、乘法和除法运算。
简易计算器的制作

简易计算器的制作在本文中,我们将介绍如何使用Visual FoxPro(VFP)制作一个简易计算器。
Visual FoxPro是一种开发工具,可以用于创建数据库应用程序和开发Windows桌面应用程序。
步骤1: 创建新的Visual FoxPro项目首先,打开Visual FoxPro并创建一个新的项目。
在“文件”菜单中选择“新建”,然后选择“项目”。
输入一个项目名称,选择一个合适的位置,然后点击“确定”。
步骤2:创建一个新的表单接下来,我们需要创建一个新的表单来作为计算器的界面。
在项目资源管理器中,右键点击“表单”文件夹,并选择“新建”。
输入一个表单名称,然后点击“确定”。
步骤3:添加控件步骤5:添加按钮事件首先,我们需要声明变量来存储用户输入的数字。
在按钮事件代码中,添加以下代码:```foxproLOCAL num1, num2, result```接下来,我们需要获取用户输入的数字。
在按钮事件代码中,添加以下代码:```foxpronum1 = VAL(Thisform.txtNum1.Value)num2 = VAL(Thisform.txtNum2.Value)```然后,我们可以执行所需的计算操作。
例如,如果我们想要添加两个数字,我们可以使用以下代码:```foxproresult = num1 + num2```最后,我们需要将结果显示在界面上。
在按钮事件代码中,添加以下代码:```foxproThisform.lblResult.Caption = STR(result)```步骤6:运行和测试完成上述步骤后,您可以保存并运行计算器。
在VFP的工具栏中,点击“运行”按钮来启动应用程序。
测试计算器,确保它可以正确执行计算操作并显示结果。
结论通过使用Visual FoxPro,我们可以轻松创建一个简易计算器。
这个计算器可以执行基本的加减乘除等操作,同时提供了一个直观的用户界面。
您可以根据需要进行自定义,添加更多功能和复杂的计算操作。
mfc入门教程之实现一个简单的计算器

mfc⼊门教程之实现⼀个简单的计算器mfc学习之前的了解什么是mfc?MFC是微软基础类的缩写(Microsoft Foundation Classes),是⼀个庞⼤的类库,可以理解为⼀种在Windows上开发软件的架构,是微软专为Visual C++定制的。
该类库提供⼀组通⽤的可重⽤的类库供开发⼈员使⽤。
没有MFC之前,Windows上⽤Win32 API进⾏编程,之后MFC出现,在⼀定程度上提⾼了软件开发效率,它是对win32 API的封装,所以易⽤性好,不过性能会⽐win32开发低⼀些,⼆者各有所长。
在Windows上开发界⾯程序以前⽤MFC最合适,能兼顾效率和性能。
简单来说mfc就是⽅便windows程序开发的框架,不单单是界⾯,更有很多类库。
mfc能⼲什么?在学习mfc之前想必⼤家都会关系这个问题,很多⼈学习了c++,或者是学习了c和c++之后发现还是只能⿊窗⼝下⾯做做数学题,写写算法,做不出什么实际的东西(这⾥不是说c/++做不出实际的东西,⽽是⼤多数的⼈做不出)。
问这个问题就像问⼀把剪⼑能⼲什么,剪⼑什么也⼲不了,我们可以拿着剪⼑剪东西,剪的好坏更多的是在于使⽤者⽽不是⼯具本⾝。
当使⽤⼀件⼯具熟练之后去使⽤同类的⼯具你会发现很轻松就能上⼿,因为它们看似有区别实则万变不离其宗。
mfc和qt的选择很多⼈会去推荐学习qt说mfc过时了,如果你想要跨平台那么qt⾮你莫属,如果只是在windows上,那么mfc⽆可替代。
⽆论是qt还是mfc在windows平台上内部的实现原理都是⼀样的,只是封装上有些区别。
mfc制作简单计算器-界⾯设计1.新建mfc项⽬启动vs2013,点击⽂件->新建->项⽬->vc++->mfc应⽤程序点击确定进⼊mfc应⽤程序向导下⼀步选择基于对话框,点击完成。
这时候mfc为我们⽣成了默认的界⾯,⼀个静态⽂本框,两个按钮。
2.计算器界⾯设计⾸先删除三个默认创建的控件,选中之后右键,删除或者直接按下delete键。
win32程序设计

win32程序设计Win32程序设计是一种针对Windows操作系统进行开发的编程方式,可以帮助开发者创建高效且易于使用的桌面应用程序。
以下是Win32程序设计的分步骤阐述。
第一步:选择编程语言和IDEWin32程序设计支持多种编程语言,包括C++、C#、Visual Basic等,开发者可以选择自己熟悉的语言进行开发。
同时,需要选择合适的集成开发环境(IDE)进行开发,例如Visual Studio等。
第二步:创建项目在IDE中创建新项目,选择Win32应用程序类型,并设置项目名称和存储位置。
在创建项目时需要选择应用程序类型,例如控制台应用程序、标准Windows应用程序等,以及所使用的编程语言。
第三步:编写代码在IDE中打开主代码文件,开始编写代码。
需要注意,在Win32程序设计中,需要使用Windows API(应用程序接口)来访问Windows 操作系统的功能。
编写代码时需要引用对应的API头文件,并定义窗口、消息处理函数等。
第四步:编译和构建完成代码编写之后,需要进行编译和构建操作。
在IDE中选择“构建解决方案”按钮,系统将自动执行编译、链接等操作,生成可执行文件和相关资源文件。
第五步:测试和调试在Win32程序设计中,测试和调试是非常重要的步骤。
在IDE中选择“调试”按钮,可以启动调试器,并进行单步调试、变量监视等操作,以发现代码中可能存在的错误和问题。
第六步:打包和发布完成测试和调试之后,需要将应用程序打包并发布。
在IDE中选择“发布”按钮,可以生成安装程序或独立执行文件,方便用户进行安装和使用。
总之,Win32程序设计是一种十分重要的桌面应用程序开发方式,可以帮助开发者创建高效且易于使用的Windows应用程序。
对于初学者来说,需要进行大量的练习和实践,才能掌握其编程技术和方法。
用Python编写简单的计算器

用Python编写简单的计算器在计算机编程中,计算器是一种非常基础而常用的工具。
通过Python编写一个简单的计算器程序,可以让我们更好地理解和应用基本计算的原理和方法。
本文将详细介绍如何使用Python来实现一个简单的计算器。
一、概述计算器是一种用于进行数值计算的工具,通常包括基本的算术运算(加法、减法、乘法、除法)和一些常用函数(如开方、取余等)。
而使用Python编写计算器程序,则可以通过编写算法和控制语句,实现这些计算功能。
二、编写计算器的基本框架1. 引入所需的库在Python编写计算器程序时,我们需要引入Python的一个内置数学库math。
通过使用该库中的函数和常量,我们可以方便地进行各种数学运算。
```pythonimport math```2. 定义计算器的主函数我们可以使用一个主函数来实现计算器的主要功能。
在主函数中,我们可以通过接收用户的输入来判断所需进行的计算操作,并输出计算结果。
```pythondef calculator():# 代码实现```3. 接收用户输入为了让计算器可以接收用户的输入,我们可以使用input()函数。
例如,我们可以提示用户输入需要进行的计算操作,然后将用户输入的数据存储在变量中。
```pythonoperation = input("请选择需要进行的计算操作:")```4. 实现不同的计算功能根据用户输入的操作类型,我们可以使用if语句或者switch语句来实现不同的计算功能。
通过调用math库中的函数,我们可以方便地实现常见的数学运算。
```pythonif operation == "+":# 代码实现加法计算elif operation == "-":# 代码实现减法计算elif operation == "*":# 代码实现乘法计算elif operation == "/":# 代码实现除法计算# 其他计算功能的实现```5. 输出计算结果根据计算的结果,我们可以使用print()函数将结果输出给用户。
windows科学计算器用法

windows科学计算器用法
Windows科学计算器是一款可以进行科学计算的软件工具,它可以帮助用户完成许多复杂的计算任务。
以下是Windows科学计算器的用法介绍:
1. 打开计算器:单击“开始”菜单,在搜索框中输入“计算器”,然后单击“科学计算器”即可打开。
2. 基本计算:在计算器上可以进行加、减、乘、除等基本计算。
单击数字键、运算符键和“=”键即可完成相应的计算任务。
3. 科学计算:在科学计算器中,用户可以进行诸如三角函数、对数函数、指数函数等的科学计算。
单击相应的按钮即可完成相应的计算任务。
4. 十六进制和二进制计算:在科学计算器中,用户还可以进行十六进制和二进制的计算。
单击“转换”按钮即可进入相应的计算模式。
5. 历史记录:在科学计算器中,用户可以查看以前的计算历史记录。
单击“查看历史记录”按钮即可查看。
6. 程序员模式:在科学计算器中,用户还可以进入程序员模式,进行位运算、逻辑运算等计算。
7. 单位转换:在科学计算器中,用户还可以进行单位转换,例如长度、面积、体积、速度、重量、温度等。
单击“单位转换”按钮即可进入相应的模式。
总之,Windows科学计算器是一款功能非常强大的软件工具,可
以帮助用户完成各种复杂的计算任务。
无论是在学习、工作还是日常生活中,都可以使用它来提高计算效率。
win32汇编程序设计

win32汇编程序设计Win32汇编程序设计Win32汇编是一种基于x86架构的汇编语言,用于开发Windows操作系统的应用程序。
它的设计目标是实现高效、快速和可靠的程序,利用底层硬件资源来实现更高级别的功能。
本文将介绍Win32汇编的概念、特点和应用,以及如何进行Win32汇编程序设计。
一、Win32汇编的概念和特点Win32汇编是一种面向Windows平台的汇编语言,它是基于Intel x86架构的指令集。
与高级语言相比,汇编语言更接近底层硬件,可以直接控制计算机的寄存器、内存和外设等资源。
Win32汇编程序可以通过调用Windows API函数来实现各种功能,如图形界面、文件操作、网络通信等。
Win32汇编具有以下特点:1. 直接访问硬件资源:Win32汇编允许程序员直接访问寄存器、内存和外设等底层硬件资源,从而实现更高级别的功能。
这种直接访问的特性使得Win32汇编在一些对效率要求较高的应用场景中具有优势。
2. 高效、快速:由于汇编语言直接操作底层硬件,因此具有更高的执行效率和更快的运行速度。
这使得Win32汇编在一些对性能要求较高的应用中被广泛使用,如游戏开发、图像处理等。
3. 灵活性:Win32汇编语言具有很高的灵活性,可以根据具体需求进行定制化开发。
程序员可以直接控制底层资源,实现特定的功能,而不受高级语言的限制。
二、Win32汇编的应用领域Win32汇编广泛应用于Windows操作系统的应用程序开发中。
以下是一些典型的应用领域:1. 系统工具开发:Win32汇编可以用于开发各种系统工具,如磁盘清理工具、注册表编辑工具等。
通过直接访问底层资源,可以实现更高级别的功能。
2. 游戏开发:由于Win32汇编具有高效、快速的特点,因此在游戏开发中被广泛应用。
通过直接操作硬件资源,可以实现更复杂的游戏逻辑和更出色的性能。
3. 图像处理:Win32汇编可以用于图像处理领域,如图像压缩、图像滤波、图像识别等。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计报告题目:在win32 application工程下计算器的设计与实现小组成员:陈李元41212204余斌41212202目录1概述1.1课程设计的内容2系统需求分析2.1系统目标2.2重要功能2.3开发环境3设计过程3.1主函数WinMain设计过程3.2窗口过程WndProc4小结5参考文献附录1:程序代码附录2:程序运行部分截图1概述1.1课程设计的内容这次c++课程设计我们组选的是设计一个带界面的计算器,不是用MFC,而是在win32 application工程下做的带界面的计算器。
它属于windows程序设计范畴。
我们主要是把功夫花在做界面上了,这个计算器本身所具有的功能很少,它只支持少量的算术运算。
2系统需求分析2.1系统目标我们在日常生活和学习中,经常会遇到一些关于数值的运算。
所以我们组就着手开始做一个计算器方便我们的学习和生活。
这个计算器它具有加法,减法,乘法,除法四种基本的算术运算。
另外还具有计算N阶阶乘的功能,此外还具有求一个弧度的正弦(余弦和它功能类似要想求余弦事先做一些弧度的转化即可)。
该计算器用例图如下:类图如下:2.2重要功能具备四种最基本的算术运算。
另外还具有阶乘,求正弦的功能。
2.3开发环境本程序是在visual c++ 6.0编译,链接,运行。
它是在win32 application工程下所创建。
3设计过程3.1主函数WinMain设计过程首先在界面设计中我们要用到大量的windows API。
这些函数都是在windows.h标准库中。
在windows程序设计中,它必须要包含一个程序入口主函数WinMain和一个过程函数WndProc。
WinMain总是以下面的形式出现。
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) WinMain第一个参数一般叫做“实例句柄”,在windows 程序中句柄就是一个数值,程序里面用他来标识一些东西。
第二个参数总是定义为NULL(定义为0)第三个参数是用来运行程序的命令行。
有些windows程序在启动时用它来把文件装入内存。
第四个参数用来指明程序最初如何显示。
创建一个窗口的步骤:(1)注册窗口类(2)创建窗口(3)在桌面显示窗口(4)更新窗口客户区(5)进入无限的消息获取和处理的循环。
首先是获取消息,如果有消息到达,则将消息分派到回调处理函数,如果消息是WM_QUIT,则GetMessage函数返回FALSE,整个消息循环结束。
其中消息具体的处理过程是在WndProc 函数中1.注册:Windows程序设计中有许许多多的结构体。
其中WNDCLASS是用于注册窗口类的。
typedef struct _WNDCLASS {UINT style;// 窗口类型WNDPROC lpfnWndProc;//窗口处理函数int cbClsExtra;//窗口扩展int cbWndExtra;//窗口实例扩展HINSTANCE hInstance;//实例句柄HICON hIcon;//窗口的最小化图标HCURSOR hCursor;//窗口鼠标光标HBRUSH hbrBackground;//窗口背景色LPCTSTR lpszMenuName;//窗口菜单LPCTSTR lpszClassName;// 窗口类名} WNDCLASS, *LPWNDCLASS;它定义了窗口的属性,风格等等,如本程序中附图:3创建窗口创建窗口,用注册窗口类的类名调用CreateWindow函数HWND CreateWindow(LPCTSTRlpClassName,//指向已注册窗口类名称的指针LPCTSTRlpWindowName,//指向窗口名称的指针DWORDdwStyle,//窗口的风格intx,//窗口位置的X坐标inty,//窗口位置的Y坐标intnWidth,//窗口的宽度intnHeight,//窗口的高度HWNDhWndParent,//父窗口的句柄HMENUhMenu,//窗口菜单句柄HINSTANCEhInstance,//应用程序使用句柄LPVOIDlpParam//应用程序数据区句柄 );在本程序中代码如图:3显示:调用显示函数ShowWindow (hwnd, iCmdShow) ;4更新窗口客户区:调用UpdateWindow (hwnd) ;函数5消息循环:在这里又要涉及一个结构体MSG定义如下:typedef struct tagMSG {HWND hwnd;UINT message;WPARAM wParam;LPARAM lParam;DWORD time;POINT pt;} MSG;调用TranslateMessage (&msg)函数把键盘输入翻译成为可传递的消息。
调用DispatchMessage (&msg) 分发一个消息到对应窗口的窗口函数。
3.2窗口过程WndProc:窗口过程总是按照如下方式来定义:LRESULT CALLBACK WndProc (HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam) 程序的功能就是在这里面实现。
在这里面调用CreateWindow函数来实现按钮的创建例如下图:这就是创建了一个按钮。
上面代码是创建了一个文本框按钮,用来显示输进去的字符以及输出结果。
重复上面的过程便得一个计算器界面,如下图:接下来要做的就是响应这些按钮并实现算术运算。
在windows中要做的是为每个按钮设置一个ID号(在创建时已经设置),这就使得每个按钮都区别开了。
详情请见代码。
switch(LOWORD(wParam))语句就是响应每个按钮在用case语句分别来响应每个按钮以及所实现的功能。
例如case ID_BUTTON2:{ lstrcat(szBuffer, "3");SetWindowText(hwndEdit,szBuffer);return 0;}该语句的功能是响应数字3按钮,并将字符‘3’显示到文本框中。
在这里要用到两个函数lstrcat()和SetWindowText()函数。
首先我们要定义一个缓冲区static TCHAR szBuffer[1024] = {0};并初始化为’\0’.用来暂时存放响应按钮并输出到文本框里的字符串。
接下来调用lstrcat()函数将字符存放到缓冲区szBuffer里面。
然后调用SetWindowText()函数将缓冲区里面的字符串输出到文本框里。
(这是在做计算器程序的最重要的一个过程)另外一个很重要的操作就是全在响应等于号按钮里面完成的。
程序代码附图:大概阐述一下等号里面的过程。
在这里面先将文本框里的字符串用GetWindowText()函数提取出来。
并用GetWindowTextLength()函数计算出字符串的长度。
然后再把字符串复制到另一数组String中,随后用memset()函数将缓冲区szBuffer清零。
接下来就是对String的处理(String里面存放的是字符串而不是数值和运算符)。
用isdigit()函数找出运算符的位置。
接下来就是调用sscanf()函数。
该函数的原型:定义函数int sscanf (const char *str,const char * format,........);函数说明sscanf()会将参数str的字符串根据参数format字符串来转换并格式化数据。
格式转换形式请参考scanf()。
转换后的结果存于对应的参数内。
返回值成功则返回参数数目,失败则返回-1,错误原因存于errno中。
返回0表示失败否则,表示正确格式化数据的个数例如:sscanf(str,"%d%d%s", &i,&i2, &s); 如果三个变成都读入成功会返回3。
将运算符前后转化成数值厚分别存放在FirstNumber,NextNumber变量中。
并对这两个变量实行相对应的四则运算并把结果存放在ResultNumber变量中。
调用sprintf()函数将实型变量转化为字符串变量并存放到StringResult里面中。
然后在调用SetWindowText()函数将StringResult里面里面的字符串输出到文本框中。
上面只是程序中一些很重要的东西,还有很多就不具体说明,许多函数的参数也是很复杂在这里就没一一写上,你想知道可以百度。
4小结Windows程序设计对我们来说是新知识,刚开始什么都不懂,就去图书馆借了两本书啃,不懂得就上网搜找答案。
那段时间几乎就是天天在弄这东西因为是新知识什么都不懂。
过程真的很煎熬,但做完了就觉得收获了很多。
知道了很多东西了解了很多东西。
5参考文献《Windows程序设计》第五版珍藏版Charles Petzold 著方敏张胜梁路平赵勇等译《windows程序设计》第二版王艳平张铮编著附录1:程序代码#include <windows.h>#include <iostream>#include <memory.h>#include <cctype>#include <stdlib.h>#include <cmath>#define IDC_EDITTEXT 1000#define ID_BUTTON0 100#define ID_BUTTON1 101#define ID_BUTTON2 102#define ID_BUTTON3 103#define ID_BUTTON4 104#define ID_BUTTON5 105#define ID_BUTTON6 106#define ID_BUTTON7 107#define ID_BUTTON8 108#define ID_BUTTON9 109#define ID_BUTTON10 110#define ID_BUTTON11 111#define ID_BUTTON12 112#define ID_BUTTON13 113#define ID_BUTTON14 114#define ID_BUTTON15 115#define ID_BUTTON16 116#define ID_BUTTON17 117#define ID_BUTTON18 118struct{int iStyle ;TCHAR * szText ;}button[] ={BS_PUSHBUTTON, TEXT ("1"),BS_PUSHBUTTON, TEXT ("2"),BS_PUSHBUTTON, TEXT ("3"), BS_PUSHBUTTON, TEXT ("4"), BS_PUSHBUTTON, TEXT ("5"), BS_PUSHBUTTON, TEXT ("6"),BS_PUSHBUTTON, TEXT ("7"),BS_PUSHBUTTON, TEXT ("8"),BS_PUSHBUTTON, TEXT ("9"),BS_PUSHBUTTON, TEXT ("0"),BS_PUSHBUTTON, TEXT ("C"),BS_PUSHBUTTON, TEXT ("."),BS_PUSHBUTTON, TEXT ("sin"),BS_PUSHBUTTON, TEXT ("n!"),BS_PUSHBUTTON, TEXT ("+"),BS_PUSHBUTTON, TEXT ("-"),BS_PUSHBUTTON, TEXT ("x"),BS_PUSHBUTTON, TEXT ("/"),BS_PUSHBUTTON, TEXT ("="),} ;#define NUM (sizeof button / sizeof button[0])LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,PSTR szCmdLine, int iCmdShow){static TCHAR szAppName[] = TEXT ("Calculator") ;HWND hwnd ;MSG msg ;WNDCLASS wndclass ;wndclass.style = CS_HREDRAW | CS_VREDRAW ;wndclass.lpfnWndProc = WndProc ;wndclass.cbClsExtra = 0 ;wndclass.cbWndExtra = 0 ;wndclass.hInstance = hInstance ;wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ;wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;wndclass.lpszMenuName = NULL ;wndclass.lpszClassName = "Calculator" ;if (!RegisterClass (&wndclass)){MessageBox (NULL, TEXT ("This program requires Windows NT!"),szAppName, MB_ICONERROR) ;return 0 ;}hwnd = CreateWindow (szAppName, TEXT ("Calculator"),WS_OVERLAPPEDWINDOW,CW_USEDEFAULT, CW_USEDEFAULT,235, 355,NULL, NULL, hInstance, NULL) ;ShowWindow (hwnd, iCmdShow) ;UpdateWindow (hwnd) ;while (GetMessage (&msg, NULL, 0, 0)){TranslateMessage (&msg) ;DispatchMessage (&msg) ;}return msg.wParam ;}LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) {static HWND hwndButton[NUM] ;static RECT rect ;static RECT rectDrawLimit = {0, 50, 200, 100};//---this!!static TCHAR szBuffer [1024] = {0};// LPSTR szBuffer=new TCHAR[1024];string str;static HWND hwndEdit;LPTSTR szString=new TCHAR[1024];// static TCHAR String[1024]={0};LPTSTR String=new TCHAR[1024];static float FirstNumber;static float NextNumber;static float ResultNumber;static int i;//static TCHAR StringResult[]={0};LPSTR StringResult=new TCHAR[1024];static int number;int count=1;double num=1;int numbe=1;static TCHAR szBuffer1[10];static TCHAR szBuffer2[10];static int iLength;static int cxChar, cyChar ;HDC hdc=GetDC(hwnd);//LPTSTR szBuffer=new TCHAR[1024];PAINTSTRUCT ps ;switch (message){case WM_CREATE :cxChar = LOWORD (GetDialogBaseUnits ()) ;cyChar = HIWORD (GetDialogBaseUnits ()) ;hwndButton[0] = CreateWindow(TEXT("button"), button[0].szText, WS_CHILD | WS_VISIBLE | button[0].iStyle,0, 120, 50, 50,hwnd, (HMENU)ID_BUTTON0, ((LPCREATESTRUCT)lParam)->hInstance, NULL);hwndButton[1] = CreateWindow(TEXT("button"), button[1].szText, WS_CHILD | WS_VISIBLE | button[1].iStyle,50, 120, 50, 50,hwnd, (HMENU)ID_BUTTON1, ((LPCREATESTRUCT)lParam)->hInstance, NULL);hwndButton[2] = CreateWindow(TEXT("button"), button[2].szText, WS_CHILD | WS_VISIBLE | button[2].iStyle,100,120,50,50,hwnd,(HMENU)ID_BUTTON2,((LPCREATESTRUCT)lParam)->hInstance,NULL);hwndButton[3]=CreateWindow(TEXT("button"), button[3].szText, WS_CHILD|WS_VISIBLE|button[3].iStyle,0,170,50,50,hwnd,(HMENU)ID_BUTTON3, ((LPCREATESTRUCT)lParam)->hInstance,NULL);hwndButton[4]=CreateWindow(TEXT("button"), button[4].szText, WS_CHILD|WS_VISIBLE|button[4].iStyle,50,170,50,50,hwnd,(HMENU)ID_BUTTON4, ((LPCREATESTRUCT)lParam)->hInstance,NULL);hwndButton[5]=CreateWindow(TEXT("button"), button[5].szText, WS_CHILD|WS_VISIBLE|button[5].iStyle,100,170,50,50,hwnd,(HMENU)ID_BUTTON5, ((LPCREATESTRUCT)lParam)->hInstance,NULL);hwndButton[6]=CreateWindow(TEXT("button"), button[6].szText, WS_CHILD|WS_VISIBLE|button[6].iStyle,0,220,50,50,hwnd,(HMENU)ID_BUTTON6, ((LPCREATESTRUCT)lParam)->hInstance,NULL);hwndButton[7]=CreateWindow(TEXT("button"), button[7].szText, WS_CHILD|WS_VISIBLE|button[7].iStyle,50,220,50,50,hwnd,(HMENU)ID_BUTTON7,((LPCREATESTRUCT)lParam)->hInstance,NULL);hwndButton[8]=CreateWindow(TEXT("button"), button[8].szText, WS_CHILD|WS_VISIBLE|button[8].iStyle,100,220,50,50,hwnd,(HMENU)ID_BUTTON8,((LPCREATESTRUCT)lParam)->hInstance,NULL);hwndButton[9]=CreateWindow(TEXT("button"), button[9].szText, WS_CHILD|WS_VISIBLE|button[9].iStyle,0,270,100,50,hwnd,(HMENU)ID_BUTTON9,((LPCREATESTRUCT)lParam)->hInstance,NULL);hwndButton[10]=CreateWindow(TEXT("button"), button[10].szText, WS_CHILD|WS_VISIBLE|button[10].iStyle,0,70,50,50,hwnd,(HMENU)ID_BUTTON10, ((LPCREATESTRUCT)lParam)->hInstance,NULL);hwndButton[11]=CreateWindow(TEXT("button"), button[11].szText, WS_CHILD|WS_VISIBLE|button[11].iStyle,100,270,50,50,hwnd,(HMENU)ID_BUTTON11,((LPCREATESTRUCT)lParam)->hInstance,NULL);hwndButton[12]=CreateWindow(TEXT("button"), button[12].szText, WS_CHILD|WS_VISIBLE|button[12].iStyle,50,70,50,50,hwnd,(HMENU)ID_BUTTON12, ((LPCREATESTRUCT)lParam)->hInstance,NULL);hwndButton[13]=CreateWindow(TEXT("button"), button[13].szText, WS_CHILD|WS_VISIBLE|button[13].iStyle,100,70,50,50,hwnd,(HMENU)ID_BUTTON13,((LPCREATESTRUCT)lParam)->hInstance,NULL);hwndButton[14]=CreateWindow(TEXT("button"), button[14].szText, WS_CHILD|WS_VISIBLE|button[14].iStyle,150,70,70,50,hwnd,(HMENU)ID_BUTTON14, ((LPCREATESTRUCT)lParam)->hInstance,NULL);hwndButton[15]=CreateWindow(TEXT("button"), button[15].szText, WS_CHILD|WS_VISIBLE|button[15].iStyle,150,120,70,50,hwnd,(HMENU)ID_BUTTON15, ((LPCREATESTRUCT)lParam)->hInstance,NULL);hwndButton[16]=CreateWindow(TEXT("button"), button[16].szText, WS_CHILD|WS_VISIBLE|button[16].iStyle,150,170,70,50,hwnd,(HMENU)ID_BUTTON16, ((LPCREATESTRUCT)lParam)->hInstance,NULL);hwndButton[17]=CreateWindow(TEXT("button"), button[17].szText, WS_CHILD|WS_VISIBLE|button[17].iStyle,150,220,70,50,hwnd,(HMENU)ID_BUTTON17, ((LPCREATESTRUCT)lParam)->hInstance,NULL);hwndButton[18]=CreateWindow(TEXT("button"), button[18].szText, WS_CHILD|WS_VISIBLE|button[18].iStyle,150,270,70,50,hwnd,(HMENU)ID_BUTTON18, ((LPCREATESTRUCT)lParam)->hInstance,NULL);CreateWindowEx(0,"edit",NULL,WS_CHILD|WS_VISIBLE|WS_BORDER|ES_MULTILINE,0,0,220,70,hwnd, (HMENU)IDC_EDITTEXT,NULL,NULL);hwndEdit=GetDlgItem(hwnd,IDC_EDITTEXT);return 0;case WM_SIZE :rect.left = 24 * cxChar ;rect.top = 2 * cyChar ;rect.right = LOWORD (lParam) ;rect.bottom = HIWORD (lParam) ;return 0 ;case WM_PAINT :InvalidateRect (hwnd, &rect, TRUE) ;hdc = BeginPaint (hwnd, &ps) ;SelectObject (hdc, GetStockObject (SYSTEM_FIXED_FONT)) ;SetBkMode (hdc, TRANSPARENT) ;EndPaint (hwnd, &ps) ;return 0 ;//case WM_DRAWITEM :// break;case WM_COMMAND :switch(LOWORD(wParam)){case ID_BUTTON0:{ //static TCHAR szBuffer1[]=TEXT("1");//str=str+"1";lstrcat(szBuffer, "1");//::TextOut(hdc,190,50,szBuffer,strlen(szBuffer));// ::DrawText(hdc, szBuffer, -1, &rectDrawLimit, DT_BOTTOM | DT_RIGHT);//---this SetWindowText(hwndEdit,szBuffer);return 0;}case ID_BUTTON1:{lstrcat(szBuffer, "2");//--this!// MessageBox(NULL,szBuffer,"",MB_OK);//::TextOut(hdc,188,50,szBuffer,lstrlen(szBuffer));//--this!// ::DrawText(hdc, szBuffer, -1, &rectDrawLimit, DT_BOTTOM | DT_RIGHT);//---this SetWindowText(hwndEdit,szBuffer);return 0;}case ID_BUTTON2:{ lstrcat(szBuffer, "3");SetWindowText(hwndEdit,szBuffer);return 0;}case ID_BUTTON3:{lstrcat(szBuffer, "4");SetWindowText(hwndEdit,szBuffer);return 0;}case ID_BUTTON4:{lstrcat(szBuffer, "5");SetWindowText(hwndEdit,szBuffer);return 0;}case ID_BUTTON5:{ lstrcat(szBuffer, "6");SetWindowText(hwndEdit,szBuffer);return 0;}case ID_BUTTON6:{ lstrcat(szBuffer, "7");SetWindowText(hwndEdit,szBuffer); return 0;}case ID_BUTTON7:{ lstrcat(szBuffer, "8");SetWindowText(hwndEdit,szBuffer); return 0;}case ID_BUTTON8:{ lstrcat(szBuffer, "9");SetWindowText(hwndEdit,szBuffer); return 0;}case ID_BUTTON9:{ lstrcat(szBuffer, "0");SetWindowText(hwndEdit,szBuffer);return 0;}case ID_BUTTON10:{memset(szBuffer, '\0', sizeof(szBuffer));SetWindowText(hwndEdit,szBuffer);return 0;}case ID_BUTTON11:{ lstrcat(szBuffer, ".");SetWindowText(hwndEdit,szBuffer); return 0;}case ID_BUTTON12:{ //lstrcat(szBuffer, "(");// SetWindowText(hwndEdit,szBuffer);number=atoi(szBuffer);memset(szBuffer, '\0', sizeof(szBuffer));sprintf(StringResult, "%f",sin(number));SetWindowText(hwndEdit,StringResult);return 0;}case ID_BUTTON13:{ //lstrcat(szBuffer, ")");//SetWindowText(hwndEdit,szBuffer);number=atoi(szBuffer);memset(szBuffer, '\0', sizeof(szBuffer));while(count<=number){num=num*count;count++;}sprintf(StringResult, "%f",num);SetWindowText(hwndEdit,StringResult);return 0;}case ID_BUTTON14:{ lstrcat(szBuffer, "+");SetWindowText(hwndEdit,szBuffer); return 0;}case ID_BUTTON15:{ lstrcat(szBuffer, "-");SetWindowText(hwndEdit,szBuffer); return 0;}case ID_BUTTON16:{ lstrcat(szBuffer, "*");SetWindowText(hwndEdit,szBuffer); return 0;}case ID_BUTTON17:{ lstrcat(szBuffer, "/");SetWindowText(hwndEdit,szBuffer);return 0;}case IDC_EDITTEXT:{return 0;}case ID_BUTTON18:{GetWindowText(hwndEdit,szString,1024);iLength=GetWindowTextLength(hwndEdit);// SetWindowText(hwndEdit,szString);strcpy(String,szString);memset(szBuffer, '\0', sizeof(szBuffer));// cout<<String<<endl;// cout<<iLength<<endl;while(isdigit(String[i])){ i++; }switch(String[i]){case '+': sscanf(String,"%f+%f",&FirstNumber,&NextNumber);ResultNumber=FirstNumber+NextNumber;break;case '-': sscanf(String,"%f-%f",&FirstNumber,&NextNumber);ResultNumber=FirstNumber-NextNumber;break;case '*': sscanf(String,"%f*%f",&FirstNumber,&NextNumber);ResultNumber=FirstNumber*NextNumber;break;case '/': sscanf(String,"%f/%f",&FirstNumber,&NextNumber);ResultNumber=FirstNumber/NextNumber;break;default: break;}// cout<<ResultNumber<<endl;sprintf(StringResult, "%f",ResultNumber );SetWindowText(hwndEdit,StringResult);FirstNumber=0;NextNumber=0;ResultNumber=0;memset(StringResult, '\0', sizeof(StringResult));memset(szString, '\0', sizeof(szString));memset(String, '\0', sizeof(String));return 0;}}case WM_DESTROY :PostQuitMessage (0) ;return 0 ;}return DefWindowProc (hwnd, message, wParam, lParam) ; }附录2:计算2*32的正弦:5的阶乘:。