ARX中非模態對話框的用法
//類似一個全局變量
CNoModalDlg* pDlg = nullptr;
//資源切換
CAcModuleResourceOverride myResource;
CMDIFrameWnd* pCadWnd = acedGetAcadFrame();
pDlg = new CNoModalDlg;
pDlg->Create(IDD_DIALOG_TEST, pCadWnd);
pDlg->ShowWindow(SW_SHOW);
//重載ONCANCLE,ONOK
void CNoModalDlg::OnCancel()
{
//do somethin
DestroyWindow();//這句話要調用
}
void CNoModalDlg::OnOK()
{
//do somethin
DestroyWindow();//這句話要調用
}
//OnClose()->OnCancel()->DestroyWindow()->OnDestroy()->OnNcDestroy()->PostNcDestroy()->僅/表示時間先後而已
//而OnNcDestroy()最後又調用了PostNcDestroy()
void CNoModalDlg::PostNcDestroy()
{
CDialog::PostNcDestroy();
delete this;//這句話用來關閉前面new出來的pDlg
}
關於cad與非模態對話框的關係
//autocad總是想取得它的子窗口的輸入焦點,因此,當非模態對話框獲取cad主動發送的WM_ACAD_KEEPFOCUS消息
//時,如果要保持輸入焦點,必須返回TRUE來響應這個消息
//在CNoModalDlg.h中添加
afx_msg LONG onAcadKeepFocus(UINT, LONG);
//WM_ACAD_KEEPFOCUS如果缺少這個宏,需要添加cad開發包的一個頭文件
#include "adslib.h"
//或者自定義
#ifndef WM_ACAD_KEEPFOCUS
#define WM_ACAD_KEEPFOCUS 100001
#endif
//在CNoModalDlg.cpp中添加
BEGIN_MESSAGE_MAP(CNoModalDlg, CDialog)
ON_MESSAGE(WM_ACAD_KEEPFOCUS, onAcadKeepFocus)
END_MESSAGE_MAP()
LONG CNoModalDlg::onAcadKeepFocus(UINT wparam, LONG lparam)
{
return TRUE;
}