首页 > 代码库 > 【mfc】基本对话框程序——加法器

【mfc】基本对话框程序——加法器

都说好了是vc6的mfc,这个加法器当然不同于数电与单片机的加法器,^_^开个玩笑,

正式转入正题,

前两篇mfc,甚至连mfc都不是,仅仅是win32程序,都只不过是一个普通的弹窗程序而已,

这次继续为大家带来的简单的win32程序,

不过已经有基本功能了,能够实现两个编辑框里面的数据相加。


一、基本目标

创建如下程序:

技术分享

有两个系统自带的按钮,原为“确定”与“取消”,现在改为“计算”与“关闭”

“计算”按钮能够把两个可编辑的对话框里面的数字相加并输出到第三个对话框,

“关闭”按钮自然能够关闭对话框了


二、制作过程

1、首先创建一个简单的win32程序,并在里面创建资源脚本,这个怎么创建请查阅我之前的《【mfc】对于对话框程序的优化与为程序创建图标》(点击打开链接)一文,唯一的不同,是这次在资源脚本中插入的是对话框,而不是图标,当然,为了程序更加美观,你可以参考上文,为其添加图标。

技术分享

Dialog资源里面还有子选项,这里不需要选择,如图所示选择父资源Dialog即可,选择“新建”完成创建


2、选择“新建”完成创建之后则弹出如下的界面:

技术分享

首先把系统附送的“确定”与“取消”按钮拖到最下方,单击这些按钮,并把其的Caption项改为“确定”与“取消”

在这个界面,通过右侧的控件工具箱,你可以拖出自己需要的控件,配合下方的控件工具栏能够把控件的位置安排好,点击任何一个控件设置好相应的属性,

比如点击一个静态文本,通过编辑其Caption项,可以把"Static"改成"+"

技术分享

同时请记录一下每个控件的ID,一会儿写代码的时候,有可能用到,需要通过ID来控制

拖错控件之后,选中,按Delete键删除

弄好之后,点击左下方的ClassView标签页,回到WinMain函数中,如同《【mfc】Helloworld》(点击打开链接)一文中写代码。


3、最终把这个对话框里面的控件安排如下图所示:

技术分享

切记:

(1)把系统自带的两个按钮的Caption从“确定”改到“计算”,从"取消"改到"关闭",

(2)对于三个EditField编辑框,请把最右方的那个编辑框的样式改成“只读”

具体是点击这个编辑框,在样式标签页,把“只读”勾上

技术分享

(3)对于整个大的对话框,请在常规中修改Caption,使其标题为“加法计算器”或者你喜欢的其他,并且在“更多样式”中把“居中”属性勾上,这样,你打开这个程序,这个对话框就会出现在屏幕的中央,而不是左上角。

技术分享


4、通过ClassView标签页,回到WinMain函数中写下如下的代码:

// dialogbox.cpp : Defines the entry point for the application.
//

#include "stdafx.h"
//一开始记得要引入resource.h,因为我们的对话框就创建在资源脚本中
#include "resource.h"

//这个回调函数MainProc是对话框的操作函数,不是真正的入口,是被WinMain中的DialogBox语句所调用的,
//4个形式参数,返回值BOOL CALLBACK皆是系统要求的,无法改变
BOOL CALLBACK MainProc(
HWND hwndDlg, // handle of dialog box
UINT uMsg, // message
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
)
{
	//如果有按钮被单击
	if(uMsg==WM_COMMAND){
		//如果点击的是IDCANCEL按钮,ID为“IDCANCEL”就是那个“关闭按钮”
		if(LOWORD(wParam)==IDCANCEL){
			//那么我们就结束对话框。
			EndDialog(hwndDlg,IDCANCEL);
			//这个true与false没有太大的区别,至少是对程序表现出来的东西没有影响,true是我们写代码处理后续的事情,false是系统处理后续的系统。
			return true;
		}
		//如果点击的是IDOK按钮,ID为“IDOK”就是那个“计算按钮”
		if(LOWORD(wParam)==IDOK){
			//拿到IDC_EDIT1编辑框的值,传到整形edit1,GetDlgItemInt其余参数为指定动作,据说hwndDlg是窗口句柄,true是取有符号数,而不是无符号数,但你知道这些又有什么意义呢?
			int edit1 = GetDlgItemInt(hwndDlg,IDC_EDIT1,NULL,true);
			//拿到IDC_EDIT2编辑框的值,传到整形edit2,GetDlgItemInt其余参数为指定动作
			int edit2 = GetDlgItemInt(hwndDlg,IDC_EDIT2,NULL,true);
			//设置IDC_EDIT3那个只读编辑框中的值为edit1+edit2的值
			SetDlgItemInt(hwndDlg,IDC_EDIT3,edit1+edit2,true);
			return true;
		}
	}
	return 0;
};

//这是程序的主要入口
int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
 	// TODO: Place code here.
	//上来就调用DialogBox参数,第二个数值必须我们要弹出的对话框IDD_DIALOG1,也就是刚才在资源脚本中画的对话框,强制转化为(LPCSTR)才能正常编译,
	//第四个参数表示这个对话框被处理的函数为MainProc
	DialogBox(hInstance,(LPCSTR)IDD_DIALOG1,NULL,MainProc);
	return 0;
}



整个程序的逻辑就是一开始进入WinMain函数,然后返回值为BOOL CALLBACK类型的MainProc被调用,处理完一大堆逻辑之后,完成程序,就这么简单。

【mfc】基本对话框程序——加法器