ARX中非模态对话框

39 篇文章 1 订阅
27 篇文章 2 订阅

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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值