最近更新于 2025-08-08 12:49
前言
ObjectARX 中的通用对话框主要使用 CAcUiDialog,它最顶层是继承自 MFC 的 CDialog,用方法和原生 MFC 差不多。
测试环境
Windows 11
Visual Studio 2022(ISO C++14)
环境配置:https://blog.iyatt.com/?p=21187
示例
创建项目
创建 ARX 项目 MfcDialog,勾选 MFC 支持
添加对话框
添加对话框资源
在项目名称上右键,添加资源
新建 Dialog
展开右侧工具箱,拖 1 个 Button 按钮进去,按钮上右键属性,修改描述文字为“你好,世界”,可以看到按钮上的文字改了
在资源视图下展开到对话框,可以看到添加的对话框资源的 ID 为:IDD_DIALOG1,后面绑定到代码里要使用这个 ID
为对话框添加关联类
在项目名称上右键,添加新建项
左侧选 ObjectARX,然后选里面的 ArxWizMFCSupport,最后点添加
类名可填:MfcDialog,基类选:CAcUiDialog,对话框 ID 选前面添加的 IDD_DIALOG1。头文件扩展名我的习惯是 C++ 中使用 .hpp,以和 C 语言区分
添加对话框功能实现代码
在类视图下,MfcDialog 类上右键属性
点击图标切换到重写选项
添加 OnInitDialog 方法
添加代码
SetWindowText(L"MFC 对话框示例");
资源视图下双击对话框的 ID,切换到对话框视图,在按钮上右键添加事件处理程序
选 MfcDialog 类,消息选 BN_CLICKED 单击
添加代码
acedAlert(L"你好,世界!");
调用对话框
类视图下双击切换到 CMfcDialogApp 类
引用对话框头文件 MfcDialog.hpp
在 On_kInitAppMsg 方法里添加代码
CAcModuleResourceOverride resOveride; // 切换资源到当前扩展程序
MfcDialog* pDlg = new MfcDialog(acedGetAcadFrame());
if (pDlg->Create(MfcDialog::IDD, acedGetAcadFrame()))
{
pDlg->ShowWindow(SW_SHOW);
}
运行测试
点击按钮弹出消息框