ARX开发 - 对话框

本文深入探讨了在ARX开发中创建和使用对话框的过程。通过实例,详细解释了如何集成对话框到应用程序中,涉及到了对话框的设计、控件添加以及用户交互的实现,对于理解ARX应用程序的扩展具有指导意义。

1、ARX中对话框通常继承自CAcUiDialog,CAcUiDialog 构造函数有个参数 HINSTANCE hInstance,默认为 NULL,指定了对话框资源所在DLL进程。如果没有指定该参数,在创建对话框(DoModal或Create)前,需要切换资源,一般是定义一个变量:CAcModuleResourceOverride res; 这个类的特点是创建的时候自动切换资源空间为当前模块,析构的时候自动切换回之前的资源空间。对于模态对话框(DoModal),在对话框存续期间,res变量也持续存在,所以,除非对话框内部要使用其他模块的资源,否则不需要再额外处理。对于非模态对话框(Create),随着创建对话框的函数结束,res变量也结束生命周期,会换回之前的资源空间,此时对话框仍然持续,在对话框内部使用资源的时候,需要再次切换资源空间。

2、CAcUiDialog 会记住上次的位置信息,如果没有进行窗口位置(最大化、居中等)操作,对话框会显示在上次退出时的位置。
3、CAcUiDialog 在模态对话框显示期间可以通过命令 BeginEditorCommand 和 CompleteEditorCommand / CancelEditorCommand 与图形进行交互,调用 BeginEditorCommand,会暂时隐藏对话框,此时可以对图形进行操作,操作完毕之后,调用CompleteEditorCommand / CancelEditorCommand 恢复显示或退出对话框。
4、CAcUiDialog 显示非模态对话框(Create),对话框会自动失去焦点,无法进行需要焦点的操作(输入、选中列表等),焦点自动切换到了图形界面。此问题的解决方法是增加一个消息处理函数:
afx_msg LRESULT OnAcadKeepFocus(WPARAM wParam, LPARAM lParam);
消息映射为:ON_MESSAGE(WM_ACAD_KEEPFOCUS, OnAcadKeepFocus)
实现:LRESULT CXXXDlg::OnAcadKeepFocus(WPARAM, LPARAM) { return TRUE; }
5、对于继承自CDialog的非模态对话框,有一个解决失去焦点的方法是,设置对话框样式(Style)为 Overlapped,而非 Popup。(不是设置Overlapped Window属性)

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值