ARX中非模態對話框

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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章