更新时间:2024-05-21 17:22
AcApDocManager对象是所有文件对象的容器(对于每一个打开的且正在编辑的图形文件都有一个文件对象)。使用宏名为acDocManager的宏可以取得唯一的实例。
AcApDocManager 类
继承自
AcRxObject
Include 文件
Acdocman.h
参见
AcApDocument, AcApDocManagerReactor, AcApDocumentIterator
AcApDocManager函数
AcApDocManager::activateDocument函数
virtual Acad::ErrorStatus
activateDocument(
AcApDocument* pAcTargetDocument,
bool bPassScript = false) = 0;
这个函数作用是从当前的 文件中转移至另一文件中。这个函数不会挂起在应用程序下执行的代码。如果是一个正常或空闲的状态则调用者被挂起。如果bPassScript值为Adesk::kTrue,则已经调用了执行改变文件的命令的脚本将继续执行。这个参数允许一个脚本跨文件运行。
AcApDocManager::addReactor函数
virtual void
addReactor(
AcApDocManagerReactor* unnamed) = 0;
这个函数向文件管理器中增加一个AcApDocManagerReactor对象。
AcApDocManager::appContextNewDocument函数
virtual Acad::ErrorStatus
appContextNewDocument(
const char * pszTemplateName) = 0;
这个函数允许同步访问“新建”图形文件的操作,只能在应用程序中调用。
AcApDocManager::closeDocument函数
virtual Acad::ErrorStatus
closeDocument(
AcApDocument* pAcTargetDocument) = 0;
这个函数关闭pAcTargetDocument所指定的 文件。若输入文件不是当前文件,则当前文件仍具有控制权;若输入文件是当前文件,则在这个函数返回之前文件的执行环境就被终止,并且终止正常的命令。
AcApDocManager::curDocument函数
virtual AcApDocument *
curDocument() const = 0;
这个函数返回含有当前环境的文件。关联的函数mdiAcitveDocument(),返回MDI的活动文件。curDocument() 和mdiActiveDocument()可以不同。可以调用curDocument()使一个文件成为当前文件而实际上不激活它。在临时的当前文件下完成acDbDAtabase操作后,调用setCurDocument(acDocManager->mdiActiveDocument())重新设置MDI的活动文件为当前的文件。
AcApDocManager::disableDocumentActivation函数
virtual Acad::ErrorStatus
disableDocumentActivation() = 0;
这个函数将禁止用户转移至另一文件中。结束后,应用程序必须重新激活(使用AcApDocManager::enableDocumentActivation)。当一个应用程序命令执行的时间较长时就可以使用这个函数。
若已经处于无效模式则返回一个错误,否则,返回Acad::eOk。
AcApDocManager::document函数
virtual AcApDocument *
document(
AcDbDatabase* unnamed) const = 0;
这个函数返回含有输入的数据库的文件。所有的数据库都在ObjectARX中建立,当前的数据和任何一个加载的Xref数据库都拥有一个和它们关联的文件。由ObjectARX应用程序建立的数据库将会自动和建立它们的环境文件关联。那么数据库中就会记录这个文件的Undo(撤消)信息。同时对数据库中的对象必须使用这个文件的Transaction Manager(事务管理器)。
AcApDocManager::documentCount函数
virtual int
documentCount() const = 0;
这个函数返回当前开启的文件个数。
AcApDocManager::enableDocumentActivation函数
virtual Acad::ErrorStatus
enableDocumentActivation() = 0;
这个函数将允许用户转移至另一文件中。这个函数用于重新激活调用AcApDocManager::disableDocumentActivation后。
若已经处于无效模式则返回错误,否则,返回Acad::eOk。
AcApDocManager::inputPending函数
virtual int
inputPending(
AcApDocument* pAcTargetDocument) = 0;
这个函数将指定文件的输入缓冲器的状态,只和AcApDocManager::sendStringToExecute函数联合使用。
返回待处理的特性的数值。返回0表示没有未完成的输入,返回-1表示错误。
AcApDocManager::isDocumentActivationEnabled函数
virtual bool
isDocumentActivationEnabled() = 0;
这个函数显示作用中的文件是否为激活状态。
若为激活状态则返回true,否则,返回false。
AcApDocManager::lockDocument函数
virtual Acad::ErrorStatus
lockDocument(
AcApDocument* pDoc,
AcAp::DocLockMode unnamed = AcAp::kWrite,
const char* pGlobalCmdName = NULL,
const char* pLocalCmdName = NULL,
bool prompt = true) = 0;
这个函数用于为了锁定文件以访问文件资源。文件资源含有和文件关联的所有AcDbDatabases对象、数据库中的AcDbObject对象和所有的AcDbDatabase常驻系统变量。文件资源也含有所有的基于文件的系统变量以及和文件关联的Transaction Manager(事务管理器)。在AcDb::kForRead中的打开AcDbObject或取得系统变量,不必锁定文件,也不必取得系统变量。
注意:kForRead为只读型。
通常应用程序不必总是锁定或解锁当前文件。以addCommand() 或 aceddefun()注册的命令,开始执行时会锁定文件,完成后会解除锁定。可以使用addCommand()函数标签控制。
返回值:
AcApDocManager::mdiActiveDocument函数
virtual AcApDocument *
mdiActiveDocument() const = 0;
这个函数返回MDI的活动文件。关联的函数mdiAcitveDocument(),返回含有当前环境的 文件。curDocument() 和mdiActiveDocument()可以不同。您可以调用curDocument()使一个文件成为当前文件而实际上不激活它。在临时的当前文件下完成acDbDAtabase操作后,调用setCurDocument(acDocManager->mdiActiveDocument())重新设置MDI的活动文件为当前的文件
AcApDocManager::newAcApDocumentIterator函数
virtual AcApDocumentIterator *
newAcApDocumentIterator() = 0;
返回指向AcApDocumentIterator对象的新的指针。
AcApDocManager::newDocument函数
virtual Acad::ErrorStatus
newDocument() = 0;
这个函数使用标准的用户交互式界面建立一个新的文件。
注意:文件的建立会挂起活动文件的环境。
AcApDocManager::openDocument函数
virtual Acad::ErrorStatus
openDocument() = 0;
这个函数使用标准的用户交互式界面打开一个文件。
AcApDocManager::popResourceHandle函数
virtual void
popResourceHandle() = 0;
这个函数使堆栈顶部的资源文件句柄成为当前的,并将它从堆栈中删除。
AcApDocManager::pushAcadResourceHandle函数
virtual void
pushAcadResourceHandle() = 0;
这个函数把当前源句柄压入当前文件的源句柄堆栈中并使AutoCAD源文件成为当前的。
AcApDocManager::pushResourceHandle函数
virtual void
pushResourceHandle(
HINSTANCE hNewResourceHandle) = 0;
这个函数把当前源句柄压入当前文件的源句柄堆栈并使指定句柄成为当前的。
AcApDocManager::removeReactor函数
virtual void
removeReactor(
AcApDocManagerReactor* unnamed) = 0;
这个函数从文件管理器中删除指定的AcApDocManagerReactor对象。
AcApDocManager::sendStringToExecute函数
virtual Acad::ErrorStatus
sendStringToExecute(
AcApDocument* pAcTargetDocument,
const char * pszExecute,
bool bActivate = true,
bool bWrapUpInactiveDoc = false,
bool bEchoString = true) = 0;
这个函数在命令行中输入一字符串并在给定的目标文件中执行。
AcApDocManager::setCurDocument函数
virtual Acad::ErrorStatus
setCurDocument(
AcApDocument* pDoc,
AcAp::DocLockMode unnamed = AcAp::kNone,
bool activate = false) = 0;
这个函数允许在应用程序环境下运行一外部应用程序使一个文件成为当前文件而实际上不激活它。这个当前状态只有在调用这个API函数的环境时有效。这样可以安全地操作文件数据而实际上使文件不处于最上层或激活状态。缺省的锁定模式参数和活动状态允许锁定和激活文件。这是允许用单一的API函数和调用单独的API函数完成多个步骤的捷径。
如果调用acDocManager->setCurDocument(pDoc, AcAp::kWrite),就可以有效地设置当前文件并锁定它。一旦完成对文件的操作,则必须将它解锁,可以调用acDocManager->unlockDocument(pDoc)进行解锁。
AcApDocManager::setDefaultFormatForSave函数
virtual Acad::ErrorStatus
setDefaultFormatForSave(
AcApDocument::SaveFormat format) = 0;
这个方法在用SAVEAS(另存为)、SAVE(保存)和QSAVE(快速保存)命令保存一个图形时使用SaveFormat值中的一种来设置文件的使用格式。这里设置了工作区间范围的默认值,然而对于一个文件,用户可以临时选择另外一个值使用。
可能的AcApDocument枚举SaveFormat(保存格式)如下:
这个方法可以由用户输入交互式命令直接设置文件格式。如果每次保存数据库时,希望将您的应用程序用当前的保存格式保存,您首先需要调用AcApDocument::formatForSave(),再用返回的SaveFormat值决定调用哪个函数。例如:如果formatForSave()返回kR14_dxf,则调用acdbDxfOutAsR14()将数据库写为Release14的DXF文件。
小结:
● 您和您的用户都可以设置一个永久的工作区间范围的保存默认值,这个默认值将用于所有保存命令,除了AUTOSAVE(自动保存)。
● 只有用户可以临时(在工作区间中并不持久)为特定的文件选择这项设置。
● formatForSave()方法返回用户需要的一个文件保存的格式,它可以是永久的工作区间范围的默认值或临时选择的值。
AcApDocManager::unlockDocument函数
virtual Acad::ErrorStatus
unlockDocument(
AcApDocument* pDoc) = 0;
这个函数用于解锁之前被锁定的一个文件。除了kAutoWrite锁定模式,所有用lockDocument()锁定的文件必须配合相应的unlockDocument()调用进行解锁。除非首先成功调用了lockDocument(),否则不能调用unlockDocument()。不能调用unlockDocument()解锁kAutoWrite模式。
注意:kProtectedAutoWrite是kAutoWrite的一种特殊形式。只有在不知道锁定何时被解锁时才使用kAutoWrite模式锁定。它们会在下一次锁定中自动解锁。然而,如果存在锁定不能被嵌套的锁定请求解锁的一段时间,则使用kProtectedAutoLock。当没有嵌套锁定的危险时,可以调用unlockDocument()。此时kProtectedAutoWrite降级为一个普通的kAutoWrite锁定。
如果解锁成功,则返回Acad::eOk。
如果pDoc 是NULL,则返回Acad::eNoDocument。
如果锁定文件的请求是由文件锁定切换反应器的回调发出,则返回Acad::eLockChangeInProgress。不能“嵌套”锁定的请求。
如果还没有锁定文件,则返回Acad::eLockViolation。
AcApDocManagerReactor 类
这个类为文档管理的多种事件提供通知。
继承自
AcRxObject
包含文件
Acdocman.h
成员
AcApDocManagerReactor 函数
AcApDocManagerReactor::documentActivated函数
virtual void
documentActivated(
AcApDocument* pActivatedDoc);
这个通知在文档被激活且其环境成功地切换时发出。
注意:存在标准用户交互作用如documentToBeActivated()之外的文档被激活的情况。
AcApDocManagerReactor::documentActivationModified函数
virtual void
documentActivationModified(
bool bActivation);
这个通知在调用disableDocumentActivation()或enableDocumentActivation()导致激活状态发生变化时发出。
AcApDocManagerReactor::documentBecameCurrent函数
virtual void
documentBecameCurrent(
AcApDocument* unnamed);
这个通知在当前文档转换时发出。这不能与文档获取焦点或激活混淆。同一文档中可以获取或失去焦点,或成为激活或不激活。这个通知只有在文档激活时发出,且不同于前一个活动文档。
AcApDocManagerReactor::documentCreateCanceled函数
virtual void
documentCreateCanceled(
AcApDocument* pDocCreateCancelled);
这个通知在用户取消文档的建立时发出。通知只有在MDI多文档模式和documentCreateStarted()返回后才发出。
AcApDocManagerReactor::documentCreated函数
virtual void
documentCreated(
AcApDocument* pDocCreating);
这个通知在建立一个新的AcApDocument时发出。它不和数据库链接。当开始新建一个文档时,应用程序可以使用在acrxEntryPoint()中的新信息确定,尽管这种方法有一指针指向新的AcApDocument。
AcApDocManagerReactor::documentCreateStarted函数
virtual void
documentCreateStarted(
AcApDocument* pDocCreating);
这个通知在文档第一次示例和无数据库访问时发出。
AcApDocManagerReactor::documentDestroyed函数
virtual void
documentDestroyed(
const char* fileName);
这个通知在文档被完全消除且与文档对应的基本数据库也被删除时发出。
AcApDocManagerReactor::documentLockModeChanged函数
virtual void
documentLockModeChanged(
AcApDocument* unnamed,
AcAp::DocLockMode myPreviousMode,
AcAp::DocLockMode myCurrentMode,
AcAp::DocLockMode currentMode,
const char* pGlobalCmdName);
这个通知在一个锁定已确定或在文档中已删除时发出。您可以区分锁定或解锁命令,解锁命令在命令名称前总带有前缀‘#’。锁定可以被禁止,但解锁不能。
AcApDocManagerReactor::documentLockModeChangeVetoed函数
virtual void
documentLockModeChangeVetoed(
AcApDocument* unnamed,
const char* pGlobalCmdName);
要求在文档中建立锁定的请求可通过反应器接受documentLockModeChanged()回调来禁止。如果这种情况发生,则接受这个回调的所有的反应器均知道请求被禁止,尽管在禁止之前不是所有的反应器都接受了documentLockModeChanged()回调。
AcApDocManagerReactor::documentLockModeWillChange函数
virtual void
documentLockModeWillChange(
AcApDocument* unnamed,
AcAp::DocLockMode myCurrentMode,
AcAp::DocLockMode myNewMode,
AcAp::DocLockMode currentMode,
const char* pGlobalCmdName);
这个通知在文档改变所有锁定之前发出。它不能被禁止。
AcApDocManagerReactor::documentToBeActivated函数
virtual void
documentToBeActivated(
AcApDocument* pActivatingDoc);
这个通知在文档即将被激活时发出。
AcApDocManagerReactor::documentToBeDeactivated函数
virtual void
documentToBeDeactivated(
AcApDocument* pDeActivatedDoc);
这个通知在文档即将被解除激活时发出。
AcApDocManagerReactor::documentToBeDestroyed函数
virtual void
documentToBeDestroyed(
AcApDocument* pDocToDestroy);
这个通知在开始删除文档时发出。
AcApDocManagerReactor::veto函数
Acad::ErrorStatus
veto();
如果documentLockModeChanged()是一个锁定请求的回调,则这个函数可以在这个documentLockModeChanged()的回调期间调用。调用这个函数的结果会使锁定请求被禁止,这通常意味着在开始执行锁定命令之前取消命令。当调用这个函数时,documentLockModeChangeVetoed()将发出通知。
如果在其它回调期间或是在解锁请求时调用此函数,将返回eNotApplicable。
为了满足函数调用接收者需要在决定是否要vote(禁止)之前对文件进行一些修改,在documentLockModeChanged()期间此函数只能为激活。通过等待发生修改的回调,文件将在具有禁止能力时被当前锁定。这是必要的,因为从这些回调的任何一个中都不能改变文档的锁定状态。