回复
我试过了,问题在m_ptree.SubclassDlgItem(IDC_TREE,this);这一句,如果注释掉这一句代码,运行就正常了,但不知道应该怎么向CEditTreeCtrl添加Item. 我尝试不用文档反应器,在acrxEntryPoint消息循环中关闭DockControlBar,只是为验证一下,因此界面没有做的太复杂,退出文档时DockControlBar可以关闭,AutoCAD也没有出错,具体代码如下,各位有兴趣可以试一下case AcRx::kUnloadDwgMsg:
//该消息是在文档关闭之前,因此最后一个文档关闭时,文档枚举计数为1,而不是0<BR> iDwg=0;<BR> pDocIter = acDocManager->newAcApDocumentIterator();<BR> for ( ; !pDocIter->done(); pDocIter->step()) {<BR> pDoc = pDocIter->document();<BR> iDwg++;<BR> if (iDwg>1) {break;}<BR> }<BR> delete pDocIter;<BR> if (i==1) {endDockBar();//关闭DockControlBar} <BR> break;<BR> } acrxEntryPoint(AcRx::AppMsgCode msg, void* pkt)<BR>{<BR> int iDwg=0;<BR> switch (msg) {<BR> case AcRx::kInitAppMsg:<BR> acrxDynamicLinker->unlockApplication(pkt);<BR> acrxDynamicLinker->registerAppMDIAware(pkt);<BR> InitApplication();<BR> break;<BR> case AcRx::kUnloadDwgMsg:<BR> {<BR> AcApDocumentIterator *pDocIter = acDocManager->newAcApDocumentIterator();<BR> for ( ; !pDocIter->done(); pDocIter->step()) {<BR> AcApDocument *pDoc = pDocIter->document();<BR> iDwg++;<BR> if (iDwg>1) {break;}<BR> }<BR> delete pDocIter;<BR> if (iDwg==1) {acedGetAcadFrame ()->DockControlBar(pInspTree);} //关闭DockControlBar<BR> break;<BR> }<BR> case AcRx::kUnloadAppMsg:<BR> UnloadApplication();<BR> break;<BR> }<BR> return AcRx::kRetOK;<BR>}<BR>这样好像不行吧,呵呵,最后一个文档关闭时,文档枚举计数的却为1,但好像还是不行,可能我的写的不对吧,楼上的高手能不能指名一下呢。
我现在没有用那个tree相关的类,自己单独再写,好像还没出问题,可能是那个地方造成的吧,反正感觉有点别扭,我当初调试时也是注销掉了m_ptree.SubclassDlgItem(IDC_TREE,this);就不会出问题,但这是达不到我的目的,呵呵,子类化的问题感觉很奇怪^_^ 没有人回答了吗,有点点失望诶,帖子都沉下去了! 怎么一直没人回答了?郁闷中 谢谢王老师,正在学习这个东东^_^ 嗯,来学习学习。。被导师的项目搞得郁闷致死,以前从来没接触过arx 谢谢分享!!!
页:
1
[2]