转载:双击实体弹出对话框(重载AcDbDoubleClickEdit)

双击实体弹出对话框(重载AcDbDoubleClickEdit)ARX 
// DoubleClickEdit.h: interface for the CDoubleClickEdit class.
//
//////////////////////////////////////////////////////////////////////

//By freejsutin 2005-08-17 
#include "AcDblClkEdit.h" //for dinfine AcDbDoubleClickEdit
#pragma comment (lib ,"AcDblClkEditPE.lib")

#include 
"actrans.h" //for dinfine actrTransactionManager

class CDoubleClickEdit : public AcDbDoubleClickEdit 
{
public:
CDoubleClickEdit();
virtual ~CDoubleClickEdit(); 

void finishEdit(void);
void CDoubleClickEdit::startEdit(AcDbEntity *pEnt, AcGePoint3d clickpt);

private:
bool upgradeOpen(AcDbObject *pEnt);
};


// DoubleClickEdit.cpp: implementation of the CDoubleClickEdit class.
//
//////////////////////////////////////////////////////////////////////

#include 
"stdafx.h"
#include 
"autodrawing.h"
#include 
"DoubleClickEdit.h"

#include 
"DeviceAttribute.h"

void CDoubleClickEdit::finishEdit()
{

}

// 主要是这个函数在起作用,在这个函数里实现你想要的功能
void CDoubleClickEdit::startEdit(AcDbEntity *pEnt, AcGePoint3d clickpt)
{
// 由于要对实体进行编辑,先锁定文档
AcApDocument *pDoc = acDocManager->curDocument();
acDocManager
->lockDocument(pDoc, AcAp::kWrite);

// 判断如果传进来的实体是我的自定义实体,便进行修改操作
if (pEnt->isKindOf(cascoCDeviceDrawing::desc())) 
{
   cascoCDeviceDrawing
* pMyClass = cascoCDeviceDrawing::cast(pEnt);

   
// 将打开级别升级到可写方式,防止对象以只读模式打开
   if!upgradeOpen(pMyClass) ) 
   {
            acDocManager
->unlockDocument(pDoc);
    
return;
   }

   
// 创建这个对象,以便切换CAD资源
   CAcModuleResourceOverride thisResource; 

   CDeviceAttribute Diatest(CWnd::FromHandle(adsw_acadMainWnd()));
   Diatest.DoModal();

   pMyClass
->close();

}

// 所有修改完成,解锁文档
acDocManager->unlockDocument(pDoc);
// 刷新显示
actrTransactionManager->flushGraphics();
}

bool CDoubleClickEdit::upgradeOpen(AcDbObject *pEnt)
{
if(pEnt->upgradeOpen()!=Acad::eOk)
{
   acutPrintf(
"错误:不能打开%s实体!", pEnt->isA()->name());
   
return FALSE;
}
return TRUE;
}

 

posted @ 2010-04-23 18:40  houlinbo  阅读(2060)  评论(3编辑  收藏  举报