MFC隐藏了太多的东西,如果不明白内部原理就很难修改其代码,这样程序就会受到MFC框架的限制,灵活性大大降低。我们来看看如何使用纯API(不让VC生成任何现成的代码)创建一个简单的对话框吧。
1.首先使用向导创建一个Win32工程,在向导里选择 “一个空的工程”。这样创建之后就一个源文件也没有了。
2.添加一个叫WinMain的源文件,用来写入口函数WinMain.
3.添加一个对话框资源,如图。
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;
}
}