ARX中自定义CDialog

定制对话框

//自定义消息
#define WM_ACAD_KEEPFOCUS WM_USER+0x1234

class MyDialog : public CDialog
{
    DECLARE_DYNAMIC(MyDialog)


public:
    afx_msg void OnPaint();
    afx_msg LRESULT OnAcadKeepFocus(WPARAM,LPARAM);
protected:
    //定义消息队列
    DECLARE_MESSAGE_MAP()
};


////////////////////////////////
IMPLEMENT_DYNAMIC(MyDialog, CDialog)


BEGIN_MESSAGE_MAP(MyDialog, CDialog)
    ON_WM_PAINT()
    ON_MESSAGE(WM_ACAD_KEEPFOCUS, OnAcadKeepFocus)
END_MASSAGE_MAP()

void MyDialog::OnPaint()
{
    CPaintDC dc(this);
}

LRESULT MyDialog::OnAcadKeepFocus(WPARAM,LPARAM)
{
    return 0;
}

IMPLEMENT_DYNAMIC是实现“运行时类型识别”宏,与之相对应的是DECLARE_DYNAMIC(声明“运行时类型识别”宏)。也就是说你在.CPP文件中如果看见有IMPLEMENT_DYNAMIC,则在.H文件中必定有DECLARE_DYNAMIC的声明。
DECLARE_DYNAMIC/DEClARE_DYNAMIC是为了确定运行时对象属于哪一个类而定义的宏。
DEClARE_DYNCREATE/IMPLEMENT_DYNCREATE是为了“动态创建"类的实例而定义的宏。new可以用来创建对象,但不是动态的。比如说,你要在程序中实现根据拥护输入的类名来创建类的实例,下面的做法是通不过的:
char szClassName[60];
cin >> szClassName;
CObject* pOb=new szClassName; //通不过
这里就要用到DEClARE_DYNCREATE/IMPLEMENT_DYNCREATE定义的功能了。

//获取某个操作后的id的集合
ads_name entLast;
AcDbObjectIdArray lastIds;
//做了添加实体的操作

ads_entlast(entLast);
//check 添加操作是否成功
struct resbuf* buf;
if ((buf = ads_entget(entLast)) == NULL)
{
	return false;
}
ads_relrb(buf);
ads_name ss;
ads_ssadd(NULL, NULL, ss);
ads_ssadd(entLast, ss, ss);
long len = 0;
ads_sslength(ss, &len);
for (long i = 0; i < len; i++)
{
	ads_name entName;
	AcDbObjectId entId;
	ads_ssname(ss, i, entName);
	acdbGetObjectId(entId, entName);
	lastIds.append(entId);
}
ads_ssfree(ss);
发布了78 篇原创文章 · 获赞 16 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/zeqi1991/article/details/96127327