[例 7.14]在规则MFC DLL中使用对话框(使用模块定义文件)

书籍:《Visual C++ 2017从入门到精通》

环境:visual studio 2022

创建MFC DLL工程

 添加对话框资源及其对应的类

修改ID

添加类

 

编写CMyDlg.h

编写CMyDlg.cpp

重写OnInitDialog()

编写OnInitDialog()

 设置窗口标题SetWindowText(m_strTitle);

// CMyDlg 消息处理程序

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

	// TODO:  在此添加额外的初始化

	SetWindowText(m_strTitle);

	return TRUE;  // return TRUE unless you set the focus to a control
	// 异常: OCX 属性页应返回 FALSE
}

添加导出函数 

在Test714_1.h头文件中添加声明

在Test714_1.cpp中实现该函数

void ShowDlg(TCHAR* sz)
{
	/*1. 模块状态切换(AFX_MANAGE_STATE)​​
		​​作用​​:确保 DLL 内部的 MFC 资源(如对话框模板、字符串)正确加载。
		​​实现机制​​:
		AfxGetStaticModuleState() 获取 DLL 自身的模块状态(AFX_MODULE_STATE)。
		宏 AFX_MANAGE_STATE 在作用域内切换资源句柄,函数退出时自动恢复原状态。
		​​必要性​​:若未切换,DLL 中的对话框可能错误加载主程序的资源。*/
	AFX_MANAGE_STATE(AfxGetStaticModuleState());
	CMyDlg dlg;			//2. 对话框对象创建(CMyDlg dlg)
	
	/*​​3.标题设置(SetTitle)​​
		​​字符串格式化​​:CString::Format 将 sz 内容格式化为宽字符字符串。
		​​标题传递​​:SetTitle 应为 CMyDlg 的自定义方法,或使用 SetWindowText 直接设置标题栏文本。*/
	CString str;
	str.Format(_T("%s"), sz);
	dlg.SetTitle(str);

	/*4.模态对话框显示(DoModal)​​
		​​阻塞行为​​:DoModal() 以模态方式显示对话框,等待用户操作后返回结果(IDOK / IDCANCEL)。
		​​消息循环​​:内部启动消息循环,处理对话框事件(如按钮点击)。*/
	dlg.DoModal();
}

编写模块定义文件

编译生成DLL

 

创建MFC应用程序调用MFC DLL中的ShowDlg()

 添加按钮及其对应的事件处理函数

 加载DLL库并调用ShowDlg()

加载DLL库

#include "../Test714_1/Test714_1.h"					//加载同解决方案中的DLL的头文件
#pragma comment(lib, "../x64/Debug/Test714_1.lib")	//加载DLL对应的引入库文件

调用ShowDlg() 

编译查看执行效果

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值