不使用MFC创建对话框---简单的计算器

MFC隐藏了太多的东西,如果不明白内部原理就很难修改其代码,这样程序就会受到MFC框架的限制,灵活性大大降低。我们来看看如何使用纯API(不让VC生成任何现成的代码)创建一个简单的对话框吧。

1.首先使用向导创建一个Win32工程,在向导里选择 “一个空的工程”。这样创建之后就一个源文件也没有了。

2.添加一个叫WinMain的源文件,用来写入口函数WinMain.
3.添加一个对话框资源,如图。

不使用MFC创建对话框---简单的计算器

4.在WinMain.cpp里输入如下代码:

#include <windows.h>

#include "resource.h"



INT_PTR ExitCode;//保存模态对话框的退出代码

INT_PTR CALLBACK DialogProc(HWND hwndDlg,UINT uMsg,WPARAM wParam,LPARAM lParam);//窗口过程函//数声明

void InitDialog(HWND hwnd);//初始化对话框函数声明

void Calculate(const int &type,HWND hwndDlg);//用于四则运算



int WINAPI WinMain(HINSTANCE hIns,HINSTANCE hPrev,LPSTR lpCmdLine,int nShowCmd)//入口函数

{

        ExitCode=DialogBox(hIns,MAKEINTRESOURCE(IDD_MAIN),NULL,DialogProc);

        return 0;

}

INT_PTR CALLBACK DialogProc(HWND hwndDlg,UINT uMsg,WPARAM wParam,LPARAM lParam)//窗口过程函数

{

        switch(uMsg)

        {

        case WM_INITDIALOG://响应窗口被创建的消息

//                        MessageBox(hwndDlg,"Create!","Warming",0);

                        InitDialog(hwndDlg);

                break;

        case WM_CLOSE:

                EndDialog(hwndDlg,ExitCode);

                break;

        case WM_COMMAND:

                if(IDC_CAL==wParam)//计算 按钮被点击时

                {

                        HWND hComBox=GetDlgItem(hwndDlg,IDC_WHICH);//获取ComboBox控件句柄

                        int Sel=SendMessage(hComBox,CB_GETCURSEL,0,0);//得到当前的选择

                        Calculate(Sel,hwndDlg);//计算结果

                }

                break;

        default:

                break;

        }

        return FALSE;

}

void InitDialog(HWND hwnd)//初始化对话框用

{

        TCHAR szStr1[]="+";

        TCHAR szStr2[]="-";

        TCHAR szStr3[]="*";

        TCHAR szStr4[]="/";

//      HWND hComBox=GetDlgItem(hwnd,IDC_WHICH);

        SendMessage(hComBox,CB_INSERTSTRING,-1,(LPARAM)szStr1);//在ComboBox控件中添加项

        SendMessage(hComBox,CB_INSERTSTRING,-1,(LPARAM)szStr2);

        SendMessage(hComBox,CB_INSERTSTRING,-1,(LPARAM)szStr3);

        SendMessage(hComBox,CB_INSERTSTRING,-1,(LPARAM)szStr4);

        SendMessage(hComBox,CB_SETCURSEL,0,0);

}

void Calculate(const int &type,HWND hwndDlg)//计算

{

        TCHAR szAdd1[40],szAdd2[40],szRes[40];

        TCHAR szTemp1[40],szTemp2[40];

        int Add1,Add2,Result;



        GetDlgItemText(hwndDlg,IDC_ADD1,szAdd1,40);

        GetDlgItemText(hwndDlg,IDC_ADD2,szAdd2,40);

        Add1=atoi(szAdd1);

        Add2=atoi(szAdd2);

        _itoa_s(Add1,szTemp1,10);

        _itoa_s(Add2,szTemp2,10);

        if(!strcmp(szTemp1,szAdd1) && !strcmp(szTemp2,szAdd2))//判断输入是否为整数

        {

                switch(type)

                {

                case 0:

                        Result=Add1+Add2;

                        _itoa_s(Result,szRes,10);

                        SetDlgItemText(hwndDlg,IDC_RESULT,szRes);

                        break;

                case 1:

                        Result=Add1-Add2;

                        _itoa_s(Result,szRes,10);

                        SetDlgItemText(hwndDlg,IDC_RESULT,szRes);

                        break;

                case 2:

                        Result=Add1*Add2;

                        _itoa_s(Result,szRes,10);

                        SetDlgItemText(hwndDlg,IDC_RESULT,szRes);

                        break;

                case 3:

                        Result=Add1/Add2;

                        _itoa_s(Result,szRes,10);

                        SetDlgItemText(hwndDlg,IDC_RESULT,szRes);

                        break;

                default:

                        return;

                        break;

                }

                return;

        }

        else

        {

                MessageBox(hwndDlg,"Illegal input!","Error",MB_OK | MB_ICONERROR);

                return;

        }

} 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值