【MFC】初识MFC

目录

[01 模态和非模态对话框](#01 模态和非模态对话框)

[02 静态文本 static text](#02 静态文本 static text)


01 模态和非模态对话框

首先我们需要知道模态对话框和非模态对话框的区别:

模态对话框是一种阻塞时对话框,它会阻止用户与应用程序的其他部分进行交互,直到用户与该对话框进行交互并关闭它,才能与其他界面进行交互。

非模态对话框是一种非阻塞式对话框,它不会阻止用户与应用程序的其他部分进行交互,用户可以在非模态对话框打开的状态下,操作其他界面元素。

在这里我们简单的介绍一下如何创建这两种对话框

首先在主对话框里创建两个按钮,分别打开模态和非模态对话框,如下:

在新建两个对话框,也就是模态和非模态对话框,在资源视图中,选择dialog目录,右键插入dialog

创建的两个对话框id分别为IDD_EXEC(模态)、IDD_SHOW(非模态)

在模态对话框IDD_EXEC中将它绑定类

这里绑定DialogExec类

非模态对话框同理,绑定一个类

接下来在主对话框里,选择按钮,右键属性,如下,选择控件事件进行设置

这里需要提醒的是,要在主对话框中显示模态对话框和非模态对话框窗口,我们需要在主对话框窗口引入这两个对话框窗口的头文件,如下:

模态对话框按钮的鼠标单击事件,要创建模态对话框,通过CDialog::DoModal()方法

非模态的创建则不一样,如果放在按钮的点击事件中,窗口会一闪而过,因为在按钮的点击事件的dlg是局部变量,出了作用域就释放了,因此需要将dlg对象放主对话框的头文件中,如下:

非模态对话框窗口的create建议放在主窗口的构造函数,因为只要创建一次就好了,也可以使用指针变量,动态创建。

非模态对话框的窗口主要通过ShowWindow()方法

参数是弹出窗口的显示方式,主要有如下几种:

|--------------------|-------------------------------------------|
| SW_HIDE | 隐藏窗口并将活动状态传递给其他创建 |
| SW_MINIMIZE | 最小化窗口并激活系统列表中的顶层窗口 |
| SW_RESTORE | 激活并显示窗口,如果窗口是最小化或最大化大的,windows恢复其原来的大小和位置 |
| SW_SHOW | 激活窗口并以当前的大小和位置显示 |
| SW_SHOWMAXIMIZED | 激活窗口并显示为最大化窗口 |
| SW_SHOWMINIMIZED | 激活窗口并显示为图标 |
| SW_SHOWNA | 按照当前状态显示窗口,当前活动的窗口将保持活动状态 |
| SW_SHOWOACTIVATE | 将窗口最近的大小和位置显示,当前活动的窗口将保持活动状态 |
| SW_SHOWNORMAL | 激活并显示窗口,如果窗口是最大化或者最小化,则windows恢复它原来的大小和位置 |
| SW_SHOWMINNOACTIVE | 将窗口显示为图标,当前活动的窗口将保持活动状态 |

02 静态文本 static text

首先我们要将对应的静态文本绑定变量,如下:

这里要注意先修改静态文本的id,默认是IDC_STATIC,这种情况下是不能绑定变量的,我们将它修改后,再进行绑定

绑定变量m_staticText

1)获取文本内容

使用GetWindowTextW()方法

cpp 复制代码
void CMFCApplication1Dlg::OnBnClickedButton2()
{
	// TODO: 在此添加控件通知处理程序代码
	CString str;
	m_staticText.GetWindowTextW(str);
	MessageBox(str);
}

效果如下:

2)设置静态文本内容

cpp 复制代码
void CMFCApplication1Dlg::OnBnClickedButton3()
{
	// TODO: 在此添加控件通知处理程序代码
	m_staticText.SetWindowTextW(_T("哈哈"));
    //或者使用如下
    //m_staticText.SetWindowTextW(TEXT("哈哈!!"));
}

效果如下:

相关推荐
小欣加油7 分钟前
leetcode287寻找重复数
数据结构·c++·算法·leetcode
思麟呀16 分钟前
C++11 核心特性(三):强类型枚举、static_assert 与 std::tuple
开发语言·c++
一拳一个呆瓜28 分钟前
【STL】C++程序的启动与终止
c++·stl
凡人叶枫1 小时前
Effective C++ 条款07:为多态基类声明 virtual 析构函数
linux·c语言·开发语言·c++
凡人叶枫1 小时前
Effective C++ 条款10:令 operator= 返回一个 reference to *this
java·linux·服务器·开发语言·c++·effective c++
王老师青少年编程1 小时前
2026年全国青少年信息素养大赛算法应用主题赛(C++赛项-复赛模拟卷6:文末附答案)
c++·答案·模拟卷·复赛·2026年·青少年信息素养大赛·算法应用主题赛
视觉小萌新2 小时前
C++利用libmicrohttpd制作交互网页端——C1
java·c++·交互
fpcc2 小时前
C++编程实践—C++实现类似Qt的信号槽机制
c++·qt
格发许可优化管理系统2 小时前
Mentor许可证使用规定全解析
java·大数据·c语言·开发语言·c++
郝学胜_神的一滴2 小时前
Qt 高级开发 030:QListWidget 右键菜单全解,从策略配置到精准删除的优雅实现
c++·qt