ObjectARX, AutoCAD. Среда программирования библиотеки C++




Пример MDI-ЗНАЮЩЕГО приложения


Следующий пример показывает простое ObjectARX-приложение, которое MDI-ЗНАЕТ.

Это - код примера от “ Использование Реактора Базы данных ” на странице 399, с кодом, добавленным, чтобы делать приложение MDI-Aware. Новый код показывается в жирном начертании.

class AsdkDbReactor;

class AsdkDocReactor: public AcApDocManagerReactor

{

public:

virtual void documentToBeActivated(AcApDocument* pDoc);

virtual void documentCreated(AcApDocument* pDoc);

virtual void documentToBeDestroyed(AcApDocument* pDoc);

};

class AsdkPerDocData

{

friend class AsdkAppDocGlobals;

public:

AsdkPerDocData(AcApDocument* pDoc);

private:

AcApDocument* m_pDoc;

AsdkPerDocData* m_pNext;

long m_EntAcc; // Entity count

AsdkDbReactor* m_pDbr;// Pointer to database reactor

};

 

class AsdkAppDocGlobals

{

public:

AsdkAppDocGlobals(AcApDocument* pDoc);

void setGlobals(AcApDocument* pDoc);

void removeDocGlobals(AcApDocument *pDoc);

void removeAllDocGlobals(AsdkPerDocData* pTarget);

void unload();

long &entityCount();

void incrementEntityCount();

void decrementEntityCount();

AsdkDbReactor *dbReactor();

void setDbReactor(AsdkDbReactor *pDb);

private:

AsdkPerDocData *m_pHead;

AsdkPerDocData *m_pData;

AsdkDocReactor *m_pDocReactor;

};

AsdkAppDocGlobals *gpAsdkAppDocGlobals;

// Custom AcDbDatabaseReactor class for Database

// event notification.

//

class AsdkDbReactor : public AcDbDatabaseReactor

{

public:

virtual void objectAppended(const AcDbDatabase* dwg,

const AcDbObject* dbObj);

virtual void objectModified(const AcDbDatabase* dwg,

const AcDbObject* dbObj);

virtual void objectErased(const AcDbDatabase* dwg,

const AcDbObject* dbObj, Adesk::Boolean pErased);

};

// This is called whenever an object is added to the database.

//

void

AsdkDbReactor::objectAppended(const AcDbDatabase* db,

const AcDbObject* pObj)

{

printDbEvent(pObj, "objectAppended");

acutPrintf(" Db==%lx\n", (long) db);

gpAsdkAppDocGlobals->incrementEntityCount();




Содержание  Назад  Вперед