您的位置:首页 > 编程语言 > C语言/C++

c++的可视化计算器

2015-08-03 20:54 162 查看
学生党的一个课程设计,希望可以对有些人有些帮助





,第一次发,不好的话请多多原谅

c++:

一.题目要求:

设计一个可视化的计算器,可以执行+,-,*,/,.,%,()等操作。要求使用API来编写程序。(我的计算器输入的时候是以#号开始)。

二.需求分析:

1.问题描述:

①——用api来编写一个可视化的计算器程序,首先我们要用界面来实现它,所以我们要设计一个计算器的可执行的界面,我使用了2个界面(具体请见第四条的测试),第一个是菜单界面,这个界面是可有可无的,我使用它是为了给用户一个选择,从file退出或从start开始进入,这个不是很重要;第二个界面是计算器的执行界面,这是本次实践的主要目的,我们需要在dialog中添加一个输入与输出列表框,许多button(数字的,运算符的,clear,cancel等),首先在纸上画出理想图,列出个数;因此我们要设计好界面,要注意界面之间,button之间的关系。

②——其次我们需要考虑的是之前的c++计算器代码与api界面代码之间的融合,这是没有做过的,要想好它们之间的关系,比如点击什么按钮的时候执行什么操作,会出来啥界面,啥提示,都要在程序中注意;还要把整个程序做成多文件的形式,不能都弄在一起,要便于编译与改错。

三.详细设计(由于c++计算器运算部分不是本次实践的主要目的,在此主要讨论界面实现部分的详细设计):

1.resource.h头文件(只是一部分,重复部分省略):

//{{NO_DEPENDENCIES}}

// Microsoft Visual C++ 生成的包含文件。

// 供 Resource.rc使用

//

#define IDR_MYMENU 101 //菜单的定义

#define IDD_START 102 //START的定义

#define IDC_BUTTON1 1000 //BUTTON1的定义

#define IDC_BUTTON2 1001 //BUTTON2的定义

#define IDC_BUTTON3 1002 //BUTTON3的定义

#define IDC_BUTTON4 1003 //BUTTON4的定义

#define IDC_BUTTON5 1004 //BUTTON5的定义

#define IDC_LIST1 1018 //列表框的定义

#define ID_FILE_EXIT 40001 //File中Exit的编译

#define ID_START_START 40002 //Start中Start中Start的定义

// Next default values for newobjects

// 以下是生成资源文件时自生成的,都是一些定义

#ifdef APSTUDIO_INVOKED

#ifndef APSTUDIO_READONLY_SYMBOLS

#define _APS_NEXT_RESOURCE_VALUE 103

#define _APS_NEXT_COMMAND_VALUE 40003

#define _APS_NEXT_CONTROL_VALUE 1021

#define _APS_NEXT_SYMED_VALUE 101

#endif

#endif

2.Resource.rc头文件(部分重要):

IDR_MYMENU MENU //定义标识符MENU

BEGIN

POPUP "&File" //点File

BEGIN

MENUITEM "E&xit", ID_FILE_EXIT //点Exit

END

POPUP "&START" //点START

BEGIN

MENUITEM"&START...", ID_START_START //点START中的START

END

END

// Dialog

//

IDD_START DIALOGEX 0, 0, 339, 182//IDD_START为资源的标识.DIALOG是资源的类型

//以STYLE开头然后在后面跟上用来创建此对话框的窗口风格

STYLE DS_SETFONT | DS_MODALFRAME |WS_POPUP | WS_CAPTION | WS_SYSMENU

//dialog的名字

CAPTION "My Calculator"

//创建此对话框的字体的大小和名字

FONT 8, "MS Sans Serif", 0,0, 0x1

BEGIN

//代表cancel按钮(定义,位置,大小)

PUSHBUTTON "Cancel",IDCANCEL,261,135,63,28

//代表BUTTON0-9按钮(定义,位置,大小)

PUSHBUTTON "1",IDC_BUTTON1,7,47,50,39

PUSHBUTTON "2",IDC_BUTTON2,7,84,50,39

PUSHBUTTON "3",IDC_BUTTON3,7,122,50,43

PUSHBUTTON "4",IDC_BUTTON4,57,48,50,37

PUSHBUTTON "5",IDC_BUTTON5,57,86,50,36

PUSHBUTTON "6",IDC_BUTTON6,58,123,50,42

PUSHBUTTON "7",IDC_BUTTON7,108,49,50,35

PUSHBUTTON "8",IDC_BUTTON8,108,85,50,37

PUSHBUTTON "9",IDC_BUTTON9,108,124,50,41

PUSHBUTTON "0",IDC_BUTTON10,159,49,50,35

//代表操作符按钮(定义,位置,大小)

PUSHBUTTON ".",IDC_BUTTON11,159,86,50,38

PUSHBUTTON "=",IDC_BUTTON12,159,124,50,41

PUSHBUTTON "+",IDC_BUTTON13,210,49,50,30

PUSHBUTTON "-",IDC_BUTTON14,210,79,50,28

PUSHBUTTON "*",IDC_BUTTON15,210,108,50,26

PUSHBUTTON "/",IDC_BUTTON16,209,135,50,29

PUSHBUTTON "(",IDC_BUTTON17,260,50,32,28

PUSHBUTTON ")",IDC_BUTTON18,293,51,32,27

PUSHBUTTON "%",IDC_BUTTON19,261,80,63,28

//列表框

LISTBOX IDC_LIST1,8,0,316,49,LBS_NOINTEGRALHEIGHT | LBS_EXTENDEDSEL | WS_VSCROLL| WS_TABSTOP

//代表Clear按钮(定义,位置,大小)

PUSHBUTTON "Clear",IDC_BUTTON20,262,108,62,27

END

// DESIGNINFO

//dialog的风格

#ifdef APSTUDIO_INVOKED

GUIDELINES DESIGNINFO

BEGIN

IDD_ABOUT, DIALOG

BEGIN

LEFTMARGIN, 7

RIGHTMARGIN, 332

TOPMARGIN, 7

BOTTOMMARGIN, 175

END

END

#endif // APSTUDIO_INVOKED

3.Win.cpp文件:

#include <windows.h>

#include "resource.h" //包含资源文件

char buf1[20]; //类外定义

//将double转换成string

string DoubleToString(double d){

stringstr;

stringstreamss;

ss<< d;

ss>> str;

returnstr;

}

char buf[100]; //类外定义

int i = 1; //类外定义

核心部分为(dialog的实现):

BOOL CALLBACK AboutDlgProc(HWND hwnd,UINT Message, WPARAM wParam, LPARAM lParam)

{

buf[0]='#'; //以#开始

switch(Message) //接收消息

{

caseWM_INITDIALOG:

return TRUE;

caseWM_COMMAND:

switch (LOWORD(wParam))

{

//当点击BUTTON1(1)的时候:

case IDC_BUTTON1:{

//清空,相当于刷新输出到界面

SendDlgItemMessage(hwnd,IDC_LIST1, LB_RESETCONTENT, 0, 0);

buf[i]= '1';

buf[++i]= '\0';

//显示

SendDlgItemMessage(hwnd,IDC_LIST1, LB_ADDSTRING, 0, (LPARAM)buf); }

break;

......

//当点击BUTTON12(=)时,要执行c++计算器的计算工作,在背后执行,不再界面显示

case IDC_BUTTON12:{

SendDlgItemMessage(hwnd,IDC_LIST1, LB_RESETCONTENT, 0, 0);

buf[i]= '=';

buf[++i]= '\0';

SendDlgItemMessage(hwnd,IDC_LIST1, LB_ADDSTRING, 0, (LPARAM)buf);

CalculatorCalcul; //定义类对象

Calcul.Cal(buf); //使用类函数成员

stringstr1 = DoubleToString(Calcul.a);

//将string转换成char类型的数组(buf1[]用于输出)

for(inti=0;i<str1.size();i++){

buf1[i]=str1[i];

}

SendDlgItemMessage(hwnd,IDC_LIST1, LB_ADDSTRING, 0, (LPARAM)buf1);

}

break;

//clear按钮,清空buf[],重新开始一次计算,但不退出当前界面

case IDC_BUTTON20:{

SendDlgItemMessage(hwnd,IDC_LIST1, LB_RESETCONTENT, 0, 0);

i=1;

for(inti=1;buf[i]!='\0';i++){

buf[i]='\0';

}

}

break;

四.测试:

1.菜单选择界面(START开始):



2.计算器主界面:



3.一个复杂的运算,输出结果:



4.使用clear,清空后继续(可以任意多次):





5.用cancel,退出当前界面:



五.结论:

通过本次的api可视化开发,让我初步了解了api编程的基本步骤和windows编程,我花了很长时间才弄懂怎么添加一些东西,怎么显示一些东西,怎样让它做一些事情,刚开始的时候很困惑。

我认为这个程序的优点在于比较易于操作,让人比较容易看的懂,基本按照标准的方法来做,如果要修改某一部分的话,从源代码中很容易自己修改,另外此程序实现了连续计算,而不用退出重来;

在缺点方面,一是主界面没有个性化,按钮什么的不是很整齐,手工调整的时候没有对齐,我会在.rc中直接修改将其改正过来;二是以前的计算器程序设计的还是不太好,在整合到可视化的时候还要对部分进行修改与调整才能匹配恰当,我课后会再将程序进行改进,以便可以方便的整合到api中去。

这次的收获很大,也让我对可视化产生了极大的兴趣,有技术又有用,我相信我会在这条路上走得更远。

六.源代码:

#ifndef STACK_H

#define STACK_H

#include<cassert>

#include<iostream>

using namespace std;

template<typename T>classStack;//类声明

template<typename T>class Node{

private:

Tinfo;

Node<T>*link;

public:

Node(Tdata = 0, Node<T>*next = NULL){

info = data;

link = next;

}

friendclass Stack<T>;

};

//链栈类模板,无头结点链表

template<typename T>classStack{

private:

Node<T>*top;//栈顶指针

public:

Stack(){top = NULL; }

~Stack();

voidPush(const T&data);//压栈

TPop();//弹出

TGetTop();//取栈顶元素

voidMakeEmpty();//清空栈

boolIsEmpty(){ return top == NULL; }

};

template<typename T>Stack<T>::~Stack(){MakeEmpty(); }

template<typename T>voidStack<T>::Push(const T&data){

top= new Node<T>(data, top);

}

template<typename T>voidStack<T>::MakeEmpty(){

Node<T>*temp;

while(top != NULL){

temp = top;

top = top->link;

delete temp;

}

}

template<typename T>TStack<T>::Pop(){

assert(!IsEmpty());

Node<T>*temp= top;

Tdata = temp->info;

top= top->link;//丢弃栈顶结点

deletetemp;//释放栈顶结点

returndata;//返回栈顶数据

}

template<typename T>TStack<T>::GetTop(){

assert(!IsEmpty());

returntop->info;

}

#endif

//保存在Stack.h

#ifndef CALCULATOR_H

#define CALCULATOR_H

#include"Stack.h"

#include<iostream>

#include<string>

using namespace std;

class Calculator{

private:

Stack<double>Nstack;

Stack<char>Ostack;

public:

doublea;

Calculator():a(0){};

~Calculator(){};

voidClear();

voidCompute(char Opr);

voidGetTwoNumDouble(double &Num1,double &Num2);

voidGetTwoNumInt(int &Num1,int &Num2);

voidCal(string);//计算器运算程序

};

#endif

//保存在Calculator.h

//{{NO_DEPENDENCIES}}

// Microsoft Visual C++ 生成的包含文件。

// 供 Resource.rc使用

//

#define IDR_MYMENU 101

#define IDD_START 102

#define IDC_BUTTON1 1000

#define IDC_BUTTON2 1001

#define IDC_BUTTON3 1002

#define IDC_BUTTON4 1003

#define IDC_BUTTON5 1004

#define IDC_BUTTON6 1005

#define IDC_BUTTON7 1006

#define IDC_BUTTON8 1007

#define IDC_BUTTON9 1008

#define IDC_BUTTON10 1009

#define IDC_BUTTON11 1010

#define IDC_BUTTON12 1011

#define IDC_BUTTON13 1012

#define IDC_BUTTON14 1013

#define IDC_BUTTON15 1014

#define IDC_BUTTON16 1015

#define IDC_BUTTON17 1016

#define IDC_BUTTON18 1017

#define IDC_LIST1 1018

#define IDC_BUTTON19 1019

#define IDC_BUTTON20 1020

#define ID_FILE_EXIT 40001

#define ID_START_START 40002

// Next default values for newobjects

//

#ifdef APSTUDIO_INVOKED

#ifndef APSTUDIO_READONLY_SYMBOLS

#define _APS_NEXT_RESOURCE_VALUE 103

#define _APS_NEXT_COMMAND_VALUE 40003

#define _APS_NEXT_CONTROL_VALUE 1021

#define _APS_NEXT_SYMED_VALUE 101

#endif

#endif

//保存在resource.h

// Microsoft Visual C++ generatedresource script.

//

#include "resource.h"

#define APSTUDIO_READONLY_SYMBOLS

/////////////////////////////////////////////////////////////////////////////

//

// Generated from the TEXTINCLUDE 2resource.

//

#ifndef __BORLANDC__

#include "winres.h"

#endif

/////////////////////////////////////////////////////////////////////////////

#undef APSTUDIO_READONLY_SYMBOLS

/////////////////////////////////////////////////////////////////////////////

// 英语(美国) resources

#if !defined(AFX_RESOURCE_DLL) ||defined(AFX_TARG_ENU)

LANGUAGE LANG_ENGLISH,SUBLANG_ENGLISH_US

#ifdef APSTUDIO_INVOKED

/////////////////////////////////////////////////////////////////////////////

//

// TEXTINCLUDE

//

1 TEXTINCLUDE

BEGIN

"resource.h\0"

END

2 TEXTINCLUDE

BEGIN

"#ifndef __BORLANDC__\r\n"

"#include ""winres.h""\r\n"

"#endif\r\n"

"\0"

END

3 TEXTINCLUDE

BEGIN

"\r\n"

"\0"

END

#endif // APSTUDIO_INVOKED

/////////////////////////////////////////////////////////////////////////////

//

// Menu

//

IDR_MYMENU MENU

BEGIN

POPUP "&File"

BEGIN

MENUITEM "E&xit", ID_FILE_EXIT

END

POPUP "&START"

BEGIN

MENUITEM"&START...", ID_START_START

END

END

/////////////////////////////////////////////////////////////////////////////

//

// Dialog

//

IDD_START DIALOGEX 0, 0, 339, 182

STYLE DS_SETFONT | DS_MODALFRAME |WS_POPUP | WS_CAPTION | WS_SYSMENU

CAPTION "My Calculator"

FONT 8, "MS Sans Serif", 0,0, 0x1

BEGIN

PUSHBUTTON "Cancel",IDCANCEL,261,135,63,28

PUSHBUTTON "1",IDC_BUTTON1,7,47,50,39

PUSHBUTTON "2",IDC_BUTTON2,7,84,50,39

PUSHBUTTON "3",IDC_BUTTON3,7,122,50,43

PUSHBUTTON "4",IDC_BUTTON4,57,48,50,37

PUSHBUTTON "5",IDC_BUTTON5,57,86,50,36

PUSHBUTTON "6",IDC_BUTTON6,58,123,50,42

PUSHBUTTON "7",IDC_BUTTON7,108,49,50,35

PUSHBUTTON "8",IDC_BUTTON8,108,85,50,37

PUSHBUTTON "9",IDC_BUTTON9,108,124,50,41

PUSHBUTTON "0",IDC_BUTTON10,159,49,50,35

PUSHBUTTON ".",IDC_BUTTON11,159,86,50,38

PUSHBUTTON "=",IDC_BUTTON12,159,124,50,41

PUSHBUTTON "+",IDC_BUTTON13,210,49,50,30

PUSHBUTTON "-",IDC_BUTTON14,210,79,50,28

PUSHBUTTON "*",IDC_BUTTON15,210,108,50,26

PUSHBUTTON "/",IDC_BUTTON16,209,135,50,29

PUSHBUTTON "(",IDC_BUTTON17,260,50,32,28

PUSHBUTTON ")",IDC_BUTTON18,293,51,32,27

LISTBOX IDC_LIST1,8,0,316,49,LBS_NOINTEGRALHEIGHT | LBS_EXTENDEDSEL | WS_VSCROLL| WS_TABSTOP

PUSHBUTTON "%",IDC_BUTTON19,261,80,63,28

PUSHBUTTON "Clear",IDC_BUTTON20,262,108,62,27

END

/////////////////////////////////////////////////////////////////////////////

//

// DESIGNINFO

//

#ifdef APSTU// Microsoft Visual C++generated resource script.

//

#include "resource.h"

#define APSTUDIO_READONLY_SYMBOLS

/////////////////////////////////////////////////////////////////////////////

//

// Generated from the TEXTINCLUDE 2resource.

//

#ifndef __BORLANDC__

#include "winres.h"

#endif

/////////////////////////////////////////////////////////////////////////////

#undef APSTUDIO_READONLY_SYMBOLS

/////////////////////////////////////////////////////////////////////////////

// 英语(美国) resources

#if !defined(AFX_RESOURCE_DLL) ||defined(AFX_TARG_ENU)

LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US

#ifdef APSTUDIO_INVOKED

/////////////////////////////////////////////////////////////////////////////

//

// TEXTINCLUDE

//

1 TEXTINCLUDE

BEGIN

"resource.h\0"

END

2 TEXTINCLUDE

BEGIN

"#ifndef __BORLANDC__\r\n"

"#include ""winres.h""\r\n"

"#endif\r\n"

"\0"

END

3 TEXTINCLUDE

BEGIN

"\r\n"

"\0"

END

#endif // APSTUDIO_INVOKED

/////////////////////////////////////////////////////////////////////////////

//

// Menu

//

IDR_MYMENU MENU

BEGIN

POPUP "&File"

BEGIN

MENUITEM "E&xit", ID_FILE_EXIT

END

POPUP "&START"

BEGIN

MENUITEM"&START...", ID_START_START

END

END

/////////////////////////////////////////////////////////////////////////////

//

// Dialog

//

IDD_START DIALOGEX 0, 0, 339, 182

STYLE DS_SETFONT | DS_MODALFRAME |WS_POPUP | WS_CAPTION | WS_SYSMENU

CAPTION "My Calculator"

FONT 10, "MS Sans Serif",0, 0, 0x0

BEGIN

PUSHBUTTON "Cancel",IDCANCEL,261,135,63,28

PUSHBUTTON "1",IDC_BUTTON1,7,47,50,39

PUSHBUTTON "2",IDC_BUTTON2,7,84,50,39

PUSHBUTTON "3",IDC_BUTTON3,7,122,50,43

PUSHBUTTON "4",IDC_BUTTON4,57,48,50,37

PUSHBUTTON "5",IDC_BUTTON5,57,86,50,36

PUSHBUTTON "6",IDC_BUTTON6,58,123,50,42

PUSHBUTTON "7",IDC_BUTTON7,108,49,50,35

PUSHBUTTON "8",IDC_BUTTON8,108,85,50,37

PUSHBUTTON "9",IDC_BUTTON9,108,124,50,41

PUSHBUTTON "0",IDC_BUTTON10,159,49,50,35

PUSHBUTTON ".",IDC_BUTTON11,159,86,50,38

PUSHBUTTON "=",IDC_BUTTON12,159,124,50,41

PUSHBUTTON "+",IDC_BUTTON13,210,49,50,30

PUSHBUTTON "-",IDC_BUTTON14,210,79,50,28

PUSHBUTTON "*",IDC_BUTTON15,210,108,50,26

PUSHBUTTON "/",IDC_BUTTON16,209,135,50,29

PUSHBUTTON "(",IDC_BUTTON17,260,50,32,28

PUSHBUTTON ")",IDC_BUTTON18,293,51,32,27

LISTBOX IDC_LIST1, 8, 0, 316, 49,LBS_NOINTEGRALHEIGHT | LBS_EXTENDEDSEL | WS_VSCROLL | WS_TABSTOP

PUSHBUTTON "%",IDC_BUTTON19,261,80,63,28

PUSHBUTTON "Clear",IDC_BUTTON20,262,108,62,27

END

/////////////////////////////////////////////////////////////////////////////

//

// DESIGNINFO

//

#ifdef APSTUDIO_INVOKED

GUIDELINES DESIGNINFO

BEGIN

IDD_ABOUT, DIALOG

BEGIN

LEFTMARGIN, 7

RIGHTMARGIN, 332

TOPMARGIN, 7

BOTTOMMARGIN, 175

END

END

#endif // APSTUDIO_INVOKED

#endif // 英语(美国) resources

/////////////////////////////////////////////////////////////////////////////

#ifndef APSTUDIO_INVOKED

/////////////////////////////////////////////////////////////////////////////

//

// Generated from the TEXTINCLUDE 3resource.

//

/////////////////////////////////////////////////////////////////////////////

#endif // not APSTUDIO_INVOKED

NVOKED

GUIDELINES DESIGNINFO

BEGIN

IDD_START, DIALOG

BEGIN

END

END

#endif // APSTUDIO_INVOKED

#endif // 英语(美国) resources

/////////////////////////////////////////////////////////////////////////////

#ifndef APSTUDIO_INVOKED

/////////////////////////////////////////////////////////////////////////////

//

// Generated from the TEXTINCLUDE 3resource.

//

/////////////////////////////////////////////////////////////////////////////

#endif // not APSTUDIO_INVOKED

//保存在Resource.rc

#include<iostream>

#include<string>

#include<cmath>

#include<cstdlib>

#include <sstream>

#include"Calculator.h"

using namespace std;

void Calculator::Clear(){

Nstack.MakeEmpty();

Ostack.MakeEmpty();

}

voidCalculator::GetTwoNumDouble(double & Num1,double & Num2){

Num1=Nstack.Pop();

Num2=Nstack.Pop();

}

void Calculator::GetTwoNumInt(int&Num1,int &Num2){

Num1=Nstack.Pop();

Num2=Nstack.Pop();

}

void Calculator::Compute(char Opr){

charOpr1=Opr;

doubleNum1,Num2;

intNum3,Num4;

if(Opr!='='&&Opr!='%')GetTwoNumDouble(Num1,Num2);

elseif(Opr!='=') GetTwoNumInt(Num3,Num4);

switch(Opr){

case'+':Nstack.Push(Num2+Num1);break;

case'-':Nstack.Push(Num2-Num1);break;

case'*':Nstack.Push(Num2*Num1);break;

case'/':Nstack.Push(Num2/Num1);break;

case'%':Nstack.Push(Num4%Num3);break;

case'=':a=Nstack.Pop();break;

}

}

void Calculator::Cal(string str){

boolb1=true;

boolb2=true;

charch2,str2[50];

stringstr1=str;

intk,j=-1;

Nstack.Push(0);

if(str1[0]=='#'){

for(k=1;k<=(int)str.length()-1;k++){

if((str1[k]>='0'&&str1[k]<='9')||str1[k]=='.'){

j++;

str2[j]=str1[k];

}

else{

if(j>=0){

str2[j+1]='\0';

Nstack.Push(atof(str2));

j=-1;

}

switch(str1[k]){

case'+':case'-':

while(!Ostack.IsEmpty()&&Ostack.GetTop()!='('){//*************注意

ch2=Ostack.Pop();

Compute(ch2);

}

Ostack.Push(str1[k]);

break;

case'*':case'/':case'%':

while(!Ostack.IsEmpty()&&b1&&Ostack.GetTop()!='('){

ch2=Ostack.Pop();

if(ch2=='*'||ch2=='/'||ch2=='%')

Compute(ch2);

else{

Ostack.Push(ch2);

b1=false;

}

}

Ostack.Push(str1[k]);

b1=true;

break;

case'=':

while(!Ostack.IsEmpty()){

ch2=Ostack.Pop();

Compute(ch2);

}

Compute(str1[k]);

break;

case'(':Ostack.Push(str1[k]);break;

case')':

charstr3=Ostack.GetTop();

while(str3!='('){

str3=Ostack.Pop();

Compute(str3);

str3=Ostack.GetTop();

}

Ostack.Pop();

break;

}

}

}

}

elsecout<<"输入格式错误!"<<endl;

}

//保存在Calculator.cpp

#include<iostream>

#include<string>

#include <sstream>

#include"Calculator.h"

using namespace std;

#include <windows.h>

#include "resource.h"

char buf1[20];

string DoubleToString(double d){

stringstr;

stringstreamss;

ss<< d;

ss>> str;

returnstr;

}

//主函数,测试,下面是api

const char g_szClassName[] ="myWindowClass";

char buf[100];

int i = 1;

BOOL CALLBACK AboutDlgProc(HWND hwnd,UINT Message, WPARAM wParam, LPARAM lParam)

{

buf[0]='#';

switch(Message)

{

caseWM_INITDIALOG:

return TRUE;

caseWM_COMMAND:

switch (LOWORD(wParam))

{

case IDC_BUTTON1:{

SendDlgItemMessage(hwnd,IDC_LIST1, LB_RESETCONTENT, 0, 0);

buf[i]= '1';

buf[++i]= '\0';

SendDlgItemMessage(hwnd,IDC_LIST1, LB_ADDSTRING, 0, (LPARAM)buf);

}

break;

case IDC_BUTTON2:{

SendDlgItemMessage(hwnd,IDC_LIST1, LB_RESETCONTENT, 0, 0);

buf[i]= '2';

buf[++i]= '\0';

SendDlgItemMessage(hwnd,IDC_LIST1, LB_ADDSTRING, 0, (LPARAM)buf);

}

break;

case IDC_BUTTON3:{

SendDlgItemMessage(hwnd,IDC_LIST1, LB_RESETCONTENT, 0, 0);

buf[i]= '3';

buf[++i]= '\0';

SendDlgItemMessage(hwnd,IDC_LIST1, LB_ADDSTRING, 0, (LPARAM)buf);

}

break;

case IDC_BUTTON4:{

SendDlgItemMessage(hwnd,IDC_LIST1, LB_RESETCONTENT, 0, 0);

buf[i]= '4';

buf[++i]= '\0';

SendDlgItemMessage(hwnd,IDC_LIST1, LB_ADDSTRING, 0, (LPARAM)buf);

}

break;

case IDC_BUTTON5:{

SendDlgItemMessage(hwnd,IDC_LIST1, LB_RESETCONTENT, 0, 0);

buf[i]= '5';

buf[++i]= '\0';

SendDlgItemMessage(hwnd,IDC_LIST1, LB_ADDSTRING, 0, (LPARAM)buf);

}

break;

case IDC_BUTTON6:{

SendDlgItemMessage(hwnd,IDC_LIST1, LB_RESETCONTENT, 0, 0);

buf[i]= '6';

buf[++i]= '\0';

SendDlgItemMessage(hwnd,IDC_LIST1, LB_ADDSTRING, 0, (LPARAM)buf);

}

break;

case IDC_BUTTON7:{

SendDlgItemMessage(hwnd,IDC_LIST1, LB_RESETCONTENT, 0, 0);

buf[i]= '7';

buf[++i]= '\0';

SendDlgItemMessage(hwnd,IDC_LIST1, LB_ADDSTRING, 0, (LPARAM)buf);

}

break;

case IDC_BUTTON8:{

SendDlgItemMessage(hwnd,IDC_LIST1, LB_RESETCONTENT, 0, 0);

buf[i]= '8';

buf[++i]= '\0';

SendDlgItemMessage(hwnd,IDC_LIST1, LB_ADDSTRING, 0, (LPARAM)buf);

}

break;

case IDC_BUTTON9:{

SendDlgItemMessage(hwnd,IDC_LIST1, LB_RESETCONTENT, 0, 0);

buf[i]= '9';

buf[++i]= '\0';

SendDlgItemMessage(hwnd,IDC_LIST1, LB_ADDSTRING, 0, (LPARAM)buf);

}

break;

case IDC_BUTTON10:{

SendDlgItemMessage(hwnd,IDC_LIST1, LB_RESETCONTENT, 0, 0);

buf[i]= '0';

buf[++i]= '\0';

SendDlgItemMessage(hwnd,IDC_LIST1, LB_ADDSTRING, 0, (LPARAM)buf);

}

break;

case IDC_BUTTON11:{

SendDlgItemMessage(hwnd,IDC_LIST1, LB_RESETCONTENT, 0, 0);

buf[i]= '.';

buf[++i]= '\0';

SendDlgItemMessage(hwnd,IDC_LIST1, LB_ADDSTRING, 0, (LPARAM)buf);

}

break;

case IDC_BUTTON12:{

SendDlgItemMessage(hwnd,IDC_LIST1, LB_RESETCONTENT, 0, 0);

buf[i]= '=';

buf[++i]= '\0';

SendDlgItemMessage(hwnd,IDC_LIST1, LB_ADDSTRING, 0, (LPARAM)buf);

CalculatorCalcul;

Calcul.Cal(buf);

stringstr1 = DoubleToString(Calcul.a);

for(inti=0;i<str1.size();i++){

buf1[i]=str1[i];

}

SendDlgItemMessage(hwnd,IDC_LIST1, LB_ADDSTRING, 0, (LPARAM)buf1);

}

break;

case IDC_BUTTON13:{

SendDlgItemMessage(hwnd,IDC_LIST1, LB_RESETCONTENT, 0, 0);

buf[i]= '+';

buf[++i]= '\0';

SendDlgItemMessage(hwnd,IDC_LIST1, LB_ADDSTRING, 0, (LPARAM)buf);

}

break;

case IDC_BUTTON14:{

SendDlgItemMessage(hwnd,IDC_LIST1, LB_RESETCONTENT, 0, 0);

buf[i]= '-';

buf[++i]= '\0';

SendDlgItemMessage(hwnd,IDC_LIST1, LB_ADDSTRING, 0, (LPARAM)buf);

}

break;

case IDC_BUTTON15:{

SendDlgItemMessage(hwnd,IDC_LIST1, LB_RESETCONTENT, 0, 0);

buf[i]= '*';

buf[++i]= '\0';

SendDlgItemMessage(hwnd,IDC_LIST1, LB_ADDSTRING, 0, (LPARAM)buf);

}

break;

case IDC_BUTTON16:{

SendDlgItemMessage(hwnd,IDC_LIST1, LB_RESETCONTENT, 0, 0);

buf[i]= '/';

buf[++i]= '\0';

SendDlgItemMessage(hwnd,IDC_LIST1, LB_ADDSTRING, 0, (LPARAM)buf);

}

break;

case IDC_BUTTON17:{

SendDlgItemMessage(hwnd,IDC_LIST1, LB_RESETCONTENT, 0, 0);

buf[i]= '(';

buf[++i]= '\0';

SendDlgItemMessage(hwnd,IDC_LIST1, LB_ADDSTRING, 0, (LPARAM)buf);

}

break;

case IDC_BUTTON18:{

SendDlgItemMessage(hwnd,IDC_LIST1, LB_RESETCONTENT, 0, 0);

buf[i]= ')';

buf[++i]= '\0';

SendDlgItemMessage(hwnd,IDC_LIST1, LB_ADDSTRING, 0, (LPARAM)buf);

}

break;

case IDC_BUTTON19:{

SendDlgItemMessage(hwnd,IDC_LIST1, LB_RESETCONTENT, 0, 0);

buf[i]= '%';

buf[++i]= '\0';

SendDlgItemMessage(hwnd,IDC_LIST1, LB_ADDSTRING, 0, (LPARAM)buf);

}

break;

case IDC_BUTTON20:{

SendDlgItemMessage(hwnd,IDC_LIST1, LB_RESETCONTENT, 0, 0);

i=1;

for(inti=1;buf[i]!='\0';i++){

buf[i]='\0';

}

}

break;

case IDCANCEL:

EndDialog(hwnd,IDCANCEL);

break;

}

break;

default:

return FALSE;

}

returnTRUE;

}

LRESULT CALLBACK WndProc(HWND hwnd,UINT Message, WPARAM wParam, LPARAM lParam){

switch(Message){

caseWM_COMMAND:

switch (LOWORD(wParam)){

case ID_FILE_EXIT:

PostMessage(hwnd,WM_CLOSE, 0, 0);

break;

case ID_START_START:{

intret = DialogBox(GetModuleHandle(NULL),

MAKEINTRESOURCE(IDD_START), hwnd,AboutDlgProc);

if(ret == IDCANCEL){

MessageBox(hwnd, "Dialog exited withIDCANCEL.", "Notice",

MB_OK | MB_ICONINFORMATION);

}

elseif (ret == -1){

MessageBox(hwnd, "Dialog failed!","Error",

MB_OK | MB_ICONINFORMATION);

}

}

break;

}

break;

caseWM_CLOSE:

DestroyWindow(hwnd);

break;

caseWM_DESTROY:

PostQuitMessage(0);

break;

default:

return DefWindowProc(hwnd, Message, wParam,lParam);

}

return0;

}

int WINAPI WinMain(HINSTANCEhInstance, HINSTANCE hPrevInstance,

LPSTRlpCmdLine, int nCmdShow)

{

WNDCLASSEXwc;

HWNDhwnd;

MSGMsg;

wc.cbSize= sizeof(WNDCLASSEX);

wc.style= 0;

wc.lpfnWndProc= WndProc;

wc.cbClsExtra= 0;

wc.cbWndExtra= 0;

wc.hInstance= hInstance;

wc.hIcon= LoadIcon(NULL, IDI_APPLICATION);

wc.hCursor= LoadCursor(NULL, IDC_ARROW);

wc.hbrBackground= (HBRUSH)(COLOR_WINDOW + 1);

wc.lpszMenuName= MAKEINTRESOURCE(IDR_MYMENU);

wc.lpszClassName= g_szClassName;

wc.hIconSm= LoadIcon(NULL, IDI_APPLICATION);

if(!RegisterClassEx(&wc))

{

MessageBox(NULL, "Window RegistrationFailed!", "Error!",

MB_ICONEXCLAMATION| MB_OK);

return 0;

}

hwnd= CreateWindowEx(

WS_EX_CLIENTEDGE,

g_szClassName,

"My First API",

WS_OVERLAPPEDWINDOW,

CW_USEDEFAULT, CW_USEDEFAULT, 240, 120,

NULL, NULL, hInstance, NULL);

if(hwnd == NULL)

{

MessageBox(NULL, "Window CreationFailed!", "Error!",

MB_ICONEXCLAMATION| MB_OK);

return 0;

}

ShowWindow(hwnd,nCmdShow);

UpdateWindow(hwnd);

while(GetMessage(&Msg, NULL, 0, 0) > 0)

{

TranslateMessage(&Msg);

DispatchMessage(&Msg);

}

returnMsg.wParam;

}

//保存在Win.cpp
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: