【MFC】学习MFC day3 vs2019 基于对话框的MFC应用程序

【MFC】学习MFC day3 vs2019 基于对话框的MFC应用程序

上一篇
下一篇

今天目标:

编写一个基于对话框的类似网页表单的MFC程序
需要3个界面(主界面,信息填写界面(非模态对话框),信息提交确认界面(模态对话框))
本章源代码的GitHub链接会放在底部

主界面:显示信息汇总

主界面

信息填写界面:填写信息

信息填写界面

信息提交确认界面:确认提交信息

信息提交确认界面

模态对话框与非模态对话框

模态对话框(Modal Dialogue Box,又叫做模式对话框),是指在用户想要对对话框以外的应用程序进行操作时,必须首先对该对话框进行响应。如单击【确定】或【取消】按钮等将该对话框关闭。一般来说,Windows应用程序中,对话框分为模态对话框和非模态对话框两种。二者的区别在于当对话框打开时,是否允许用户进行其他对象的操作。
好的,开始。

1、应用程序类型选择基于对话框

在这里插入图片描述

2、选择Dlg类

在这里插入图片描述

3、点击插入对话框,插入2个

在这里插入图片描述

4、右击窗体,点击添加类,需要用到的窗体都需要添加好

在这里插入图片描述

5、设置好界面

(略)

之后就是代码了,但是再写之前需要知道:

1、右击控件,选择属性,可以设置控件的属性,以及绑定事件函数

2、双击控件,会有一个绑定一个默认的事件,比如按钮的默认事件是 按钮点击事件,会自动绑定OnBnClickedButton函数

void CMFCDialogDlg::OnBnClickedButton1()
{
	// TODO: 在此添加控件通知处理程序代码
	MsgDlg->ShowWindow(1);//SW_NORMAL==1
}

3、在设计界面,右击控件,可为控件添加变量,存放数据或者需要操控的控件一般就需要添加

4、Staitc Text 控件添加变量,需要将控件ID(ID在控件属性里面改)后的STATIC改为其他的,列如将(IDC_STATIC 改为 IDC_LABEL1)
5、控件变量是与控件对应,我们可以认为操控控件变量就是在操控控件本身,之前我们为窗体添加的类也可以这样理解
6、Edit控件(文本框控件)有一个特性就是回车会关闭对话框,所以需要设置属性
设置属性为:
Multiline=True
Want Enter=True

如何打开另一个对话框呢?

主界面的类中添加一个MsgDialog(信息填写界面的类)类型的成员变量,并且进行实列化

public:
		MsgDialog *MsgDlg = new MsgDialog();

在CMFCDialogDlg(主界面的类)的初始化函数中,调用MsgDlg的Create(IDD_DIALOG1);函数

BOOL CMFCDialogDlg::OnInitDialog()
{
	CDialogEx::OnInitDialog();

	// 将“关于...”菜单项添加到系统菜单中。

	// IDM_ABOUTBOX 必须在系统命令范围内。
	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
	ASSERT(IDM_ABOUTBOX < 0xF000);

	CMenu* pSysMenu = GetSystemMenu(FALSE);
	if (pSysMenu != nullptr)
	{
		BOOL bNameValid;
		CString strAboutMenu;
		bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
		ASSERT(bNameValid);
		if (!strAboutMenu.IsEmpty())
		{
			pSysMenu->AppendMenu(MF_SEPARATOR);
			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
		}
	}

	// 设置此对话框的图标。  当应用程序主窗口不是对话框时,框架将自动
	//  执行此操作
	SetIcon(m_hIcon, TRUE);			// 设置大图标
	SetIcon(m_hIcon, FALSE);		// 设置小图标

	// TODO: 在此添加额外的初始化代码
	MsgDlg->Create(IDD_DIALOG1);
	return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
}

再在点击事件中调用MsgDlg的ShowWindow(1)函数即可以非模态方式打开一个对话框(信息填写界面)

void CMFCDialogDlg::OnBnClickedButton1()
{
	// TODO: 在此添加控件通知处理程序代码
	MsgDlg->ShowWindow(1);//SW_NORMAL==1
}

总结:非模态对话框的打开步骤为 对话框类实列化=》调用Create成员函数=》调用ShowWindow成员函数

以此类推,模态对话框的打开步骤为 对话框类实列化=》调用DoModal成员函数

知道这些内容后今天的目标就很容易就能完成了,我就不再详细介绍其他的代码。
我会把完整的源代码文件的GitHub的链接放在最后。

最后

感谢大家的翻阅。

附加:

本篇文章源代码

猜你喜欢

转载自blog.csdn.net/m0_46202128/article/details/107752380