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

来源:互联网 发布:天津网站建设优化 编辑:程序博客网 时间:2024/05/22 03:21

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;        }} 


 

原创粉丝点击