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属性)

你可能感兴趣的:(C/C++,ARX)