【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被调用,处理完一大堆逻辑之后,完成程序,就这么简单。

时间: 2024-08-02 06:55:13

【mfc】基本对话框程序——加法器的相关文章

201506022 CEF嵌入MFC对话框程序

最近在学习CEF,发现自己的编程能力实在太弱,看不懂应该怎么使用这个库,也不知道可以向谁请教,尽管官方说提供的cefclient示例程序已经很清楚了啊,但是我看不懂啊,自己一个人慢慢磨真的十分痛苦.最近结合网上的资料,学习了一些些吧,写下这篇日志,希望可以帮到后来的人(不过后来的人应该不会像我这么弱了的吧). 这是一个将CEF嵌入MFC对话框的程序,说来惭愧,到现在我都还不会怎么写一个好看的界面,只会在MFC上堆砌各种控件,唉. 这篇日志主要参考了以下资料: https://bitbucket.

VS2010的MFC对话框程序中添加菜单栏的过程

VS2010的MFC对话框程序中添加菜单栏的过程 最近在看一个用MFC写的界面的项目的代码,在代码和界面中一直没有看到关于菜单控件是如何添加进对话框的,于是就百度了下.结果,与其它控件(Button等)添加的方式不一样: VS2010的MFC对话框程序中添加菜单栏的过程大致分了这五步. 一.将Menu加入Resource视图中 在WorkSpace中的Resource视图下,在左边目录的任意位置上,先右键-->选择Insert Resource(插入资源)选项,在弹出的对话框中选择Menu以后,

在MFC对话框程序中使用加速键

新建一个基于对话框的工程,添加一个按钮,修改按钮ID,这里为ID_BTN_OPENFILE,为按钮添加消息响应事件,这里我打开文件保存对话框: void CAccelDlg::OnBtnOpenfile() { // TODO: Add your control notification handler code here CFileDialog dlg (TRUE); dlg.DoModal (); } 为工程添加一个加速键资源,添加一条,注意ID要和按钮的ID相同,只有这样才能产生关联 为主

【mfc】对于对话框程序的优化与为程序创建图表

本文是继上一篇<[mfc]Helloworld>(点击打开链接)所写出来的对话框进行了的优化, 这次要把这个对话框程序做得更加好. 一.基本目标 1.为这个对话框程序加上自己的图标,如下图: 2.不再是仅有一个让用户点击的对话框了,而且在用户点击确定与取消按钮之后能够进行判断 比如,用户点击了确定,则弹出用户点击了确定的提示 如果用户点击了取消,则弹出用户点击取消的提示 二.制作过程 1.首先像<[mfc]Helloworld>(点击打开链接)中,先新建一个简单的Win32工程,然

mfc 对话框程序 托盘实现

1 在头文件里面定义 消息 #define WM_SHOWTASK WM_USER+10 在主窗口类里面定义 一个变量 两个函数 a 变量 托盘结构体的变量 NOTIFYICONDATA m_nid; b 初始化上述变量的函数 void ToTray(void); c 托盘的消息处理函数 LRESULT onShowTask(WPARAM wParam,LPARAM lParam); 2 在cpp里面 添加一下内容 a 在BEGIN_MESSAGE_MAP 和 END_MESSAGE_MAP 之

[原]MFC中DIALOG(对话框)程序响应加速键(快捷键)

[原]MFC中DIALOG(对话框)程序响应加速键(快捷键) 2014-8-6阅读266 评论0 新建一个对话框程序,项目名为Test,删除默认确定,取消和静态文本框控件.添加一个按钮,Caption修改为“打开”,ID为IDC_Open,双击该按钮添加响应函数,响应函数如下: void CTestDlg::OnBnClickedOpen() { MessageBox("打开 被按下"); } 即程序运行之后点击“打开”则弹出一个对话框. 下面为这个按钮添加快捷键ctrl+o.左下角切

基于MFC对话框程序中添加菜单栏 (CMenu)

vs2013MFC对话框程序中添加菜单栏的过程,我大致分了这五步. 一.将Menu加入Resource视图中 在WorkSpace中的Resource视图下,在任意一个文件夹图标上,右击选择Insert(插入)选项,在弹出的对话框中选择Menu以后,再点击,new按钮,菜单就会添加成功了,但是现在还没有完成,还不能进行编译,因为现在的菜单时空的,在编译的时候会被清除的. 二.用菜单编辑器添加菜单栏及菜单项 菜单添加成功后,菜单编辑器自动打开,可以在其中添加菜单栏及菜单项,比较简单. 三.将菜单加

MFC通过对话框窗口句柄获得对话框对象指针

C***Dialog* pWnd= (C***Dialog*)FromHandle(hWnd); //由句柄得到对话框的对象指针    pWnd->xxx( );                                             //调用C***Dialog中的函数xxx(); 通过窗口类函数:CWnd *GetWindow获得窗口指针,pWnd->m_hWnd(The handle of the Windows window attached to this CWnd)

VC++ 对话框程序响应键盘消息的处理方法的说明(非常重要)

基于MFC对话框的应用程序在响应按键消息和热键方面都力不从心,CDialog类的消息循环中去掉了TranslateAccelerator函数,因此不能响应热键:同时由于对话框上可能有很多控件,且默认情况下这些子窗口已经截获了焦点,因此键盘消息已经被控件捕获了:同时为了实现控件焦点切换和对话框默认行为,  VK_TAB.VK_LEFT.VK_RIGHT.VK_UP.VK_DOWN. VK_RETURN.VK_ESCAPE 等键已经被截获处理,因此对话框没有控件时仍然不能完全响应按键消息. 关于热键