在程序关闭时,调用保存profile.aws文件

发布时间 2023-06-27 09:45:51作者: unicornsir
1、配置类相关函数,即下面的对话框的相关修改可以通过
acProfileManagerPtr

2、当配置项改变时,可以通过反应器AcApProfileManagerReactor来监视相应的改动,并实现相应的功能

3、对于gui特别是paletteset的保存项可以通过AcApProfileStorage来进行管理,下面示例就是在关闭程序时,调用相应的Save函数,实现profile.awt保存功能

 



extern "C" _declspec(dllexport) AcRx::AppRetCode acrxEntryPoint(AcRx::AppMsgCode msg, void* pkt)
{
    switch (msg)
    {
    case AcRx::kInitAppMsg:
        break;

    case AcRx::kUnloadAppMsg:
        {
            TCHAR szCurrentProfileName[MAX_PATH];
            Sysvar_get(_T("CPROFILE"), szCurrentProfileName);
            AcApProfileStorage* pStore = nullptr;
            acProfileManagerPtr()->ProfileStorage(pStore, szCurrentProfileName, FALSE);
            if (pStore)
            {
                AcString szFile;
                pStore->GetStorageFile(szFile);
                pStore->Save();
            }
        }
        break;

    }
    return AcRx::kRetOK;
}

 

 

extern "C" _declspec(dllexport) AcRx::AppRetCode acrxEntryPoint(AcRx::AppMsgCode msg, void* pkt){TRACE_IN(AcRx::AppRetCode acrxEntryPoint());TraceVal(int(msg)) << endtl;TCHAR filename[_MAX_PATH] = _T("");Stop* pStop = NULL;
switch (msg){case AcRx::kInitAppMsg:
//0707-11-29 取消自动保存if (bAUTOSAVE){struct resbuf rb;rb.restype = RTSHORT;rb.resval.rint = 0;acedSetVar(_T("SAVETIME"), &rb);bAUTOSAVE = 0;}//0707-11-29 取消自动保存
acrxDynamicLinker->unlockApplication(pkt);acrxDynamicLinker->registerAppMDIAware(pkt);
InitApplication();
if (pAcEditorReactor == NULL){pAcEditorReactor = new MyAcEditorReactor();acedEditor->addReactor(pAcEditorReactor);}if (pAppDocGlobals == NULL){tjCommandManager::AddtjCmd(0, _T("CmdClacLockState"), CmdClacLockState);tjCommandManager::AddtjCmd(0, _T("CmdAxisLockState"), CmdAxisLockState);tjCommandManager::AddtjCmd(0, _T("Cmd_CalLengthShow"), Cmd_CalLengthShow);RibbonManager::AddRibbonReactor(new CNetRibbonReactor());
pAppDocGlobals = new MyAppDocGlobals(curDoc());pAppDocGlobals->setGlobals(curDoc());}if (pMjAppDocGlobals == NULL)  //0404-6-9{pMjAppDocGlobals = new MjAppDocGlobals(curDoc());pMjAppDocGlobals->setGlobals(curDoc());}{TlArx::Doc::tjNoSaveReactor* pNoSaveReactor = TlArx::Doc::tjNoSaveReactor::getInstance();pNoSaveReactor->addNoSaveClassName(_T("CHighRiseLayerInfo"));pNoSaveReactor->addNoSaveClassName(_T("CDbFloorUnit"));pNoSaveReactor->addNoSaveClassName(_T("CDbWallEdge"));pNoSaveReactor->addNoSaveClassName(_T("CDbWallGroup"));pNoSaveReactor->addNoSaveClassName(_T("CDbFloorMember"));}if (pStop == NULL){pStop = new Stop();}break;
case AcRx::kUnloadAppMsg:
if (pAppDocGlobals != NULL){pAppDocGlobals->unload();delete pAppDocGlobals;pAppDocGlobals = NULL;}if (pAcEditorReactor != NULL) {acedEditor->removeReactor(pAcEditorReactor);delete pAcEditorReactor;pAcEditorReactor = NULL;}if (pMjAppDocGlobals != NULL)  //0404-6-9{pMjAppDocGlobals->unload();delete pMjAppDocGlobals;pMjAppDocGlobals = NULL;}if (pStop != NULL){delete pStop;pStop = NULL;}
{TCHAR szCurrentProfileName[MAX_PATH];T_S_BASEFUN_AUTOCAD.Sysvar_get(_T("CPROFILE"), szCurrentProfileName);AcApProfileStorage* pStore = nullptr;acProfileManagerPtr()->ProfileStorage(pStore, szCurrentProfileName, FALSE);if (pStore){AcString szFile;pStore->GetStorageFile(szFile);pStore->Save();}}//UnloadApplication();break;
case AcRx::kLoadDwgMsg:{setFont();CString strOldModelInfo;calinit();readSectorFromFile();MyPerDocData* pTJpDoc = TJpDoc;if (pTJpDoc->nodenum > 0){if (pTJpDoc->m_pCheckDesignGroupLib != NULL && 0 >= pTJpDoc->m_pCheckDesignGroupLib->getGroupCounts()){pTJpDoc->buildCheckGroupByUnit();}
//是否包含老版本吊车文件(老版本吊车偏心到内柱边距离,改为到形心距离)  //1111-2-23if (TJpDoc->unitNumAll > 0){if (HaveOldVersionCraFile()){strOldModelInfo.AppendFormat(_T("◆本工程有吊车信息,新版本软件吊车数据描述有变化。\n  请用 <桥式吊车影响线计算> 命令修改相应数据:\n    原 <到左柱边偏心> 改为 <到左柱建模位置偏心>\n    原 <到右柱边偏心> 改为 <到右柱建模位置偏心>\n  可以用 <显示吊车荷载> 命令显示吊车信息。\n\n"));}}versionUpdateManager::getInstance().update(pkt, strOldModelInfo);// 保存软件锁信息if (TJpDoc->nodenum > 500){CObjectARX2008::SetSysVar(_T("CMDECHO"), 0);acDocManager->sendStringToExecute(acDocManager->curDocument(), _T("CheckUser\n"), true, false, false);}}
break;}case AcRx::kUnloadDwgMsg:
if (ISSAVE){if (!titled)//尚无文件名{//MySave2(type,true);   //0606-4-25 隐 防止另存时在安装目录下多一个无用目录MySave3(type, true);   //1010-9-17 不退出CAD,退出当前dwg,点保存时调用此函数;否则文件夹不能保存}}titled = 0;type = 0;ISSAVE = false;break;
case AcRx::kSaveMsg:
//打开多个文档,自动保存时,可能不是保存当前激活文档,所以TJpDoc需转换,否则可能用当前文档TJpDoc的数据保存到其他文档,出错! //0707-5-25if (pAppDocGlobals->m_pData != NULL){if (pAppDocGlobals->m_pData->m_pDoc != NULL){AcApDocument* pDocCur = acDocManager->curDocument();if (pAppDocGlobals->m_pData->m_pDoc != pDocCur){pAppDocGlobals->setGlobals(pDocCur);}}}if (pMjAppDocGlobals->m_pData != NULL){if (pMjAppDocGlobals->m_pData->m_pDoc != NULL){AcApDocument* pDocCur = acDocManager->curDocument();if (pMjAppDocGlobals->m_pData->m_pDoc != pDocCur){pMjAppDocGlobals->setGlobals(pDocCur);}}}//打开多个文档,自动保存时,可能不是保存当前激活文档,所以TJpDoc需转换,否则可能用当前文档TJpDoc的数据保存到其他文档,出错! //0707-5-25
if (TJpDoc->AutoCAD_COMMAND_ERROR)//若在取消UNDO功能状态下,要保证存盘时每个物体的改动要保存{for (int i = 1; i <= TJpDoc->unitNumAll; i++)TJpDoc->GetLine(i)->Redraw(false, false);
for (i = 1; i <= TJpDoc->nodenum; i++)TJpDoc->GetPoint(i)->Redraw(false, false);
for (i = 1; i <= TJpDoc->boardnum; i++)TJpDoc->GetBoard(i)->Redraw(false, false);
for (i = 1; i <= TJpDoc->meshnum; i++)TJpDoc->GetMesh(i)->Redraw(false, false);
for (i = 1; i <= TJpDoc->bmeshnum; i++)TJpDoc->GetBMesh(i)->Redraw(false, false);}if ((TJpDoc->GetFirstAvailableSector() != NULL&& C3D3SVersion::Is3D3S_Solid()) || TJpDoc->nodenum > 0){datasave(TJpDoc);  //0404-5-17if (TJpDoc->mProjNo > 0)    //0404-5-17datasave(TJpDoc, TJpDoc->mProjNo);
WriteGlobalData(MGData);  //0404-9-10
if (TJpDoc->m_pTLFileModelGroup)TJpDoc->GetTLFileModelGroup()->Write();}
if (TJpDoc->unitNumAll > 0 || TJpDoc->nodenum > 0 || TJpDoc->meshnum > 0 || TJpDoc->bmeshnum > 0 || TJpDoc->boardnum > 0|| TJpDoc->mProjNo || TJpDoc->mBZC_Num)ISSAVE = true;elseISSAVE = false;
//1010-9-17sysvar_get(_T("DWGTITLED"), titled);
if (titled){sysvar_get(_T("DWGPREFIX"), TJFILEDIR);int len = _tcslen(TJFILEDIR);TJFILEDIR[len - 1] = '\0';}else{TCHAR docPath[MAX_PATH];GetAppDir(docPath);   //0606-4-4_stprintf(TJFILEDIR, _T("%s\\TJTEMP"), docPath);}
sysvar_get(_T("DWGNAME"), TJFILENAME);int len = _tcslen(TJFILENAME);TJFILENAME[len - 4] = '\0';
type = TJpDoc->MSGJ_PURLINE;
// 取消高层模块中的一些临时显示对象if (titled){CArrangeWall::Resort3DModel();}break;
}return AcRx::kRetOK;}