#include "stdafx.h" #include "AcDbObjectPtr.h" #include "globalFunc.h" #include "EditOutdoorPipeDlg.h" #include "Resource.h" #include "RBGroups.h" #include "PickEntSet.h" #include "DbPipe.h" #include "layerdef.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif //从Kernal移植过来 根据pline线选取设备 void GetEquipmentFromPline(PickSet &ss, const resbuf* rbMask = NULL) { Entity entPoly; RBList rbMask2(RTDXF0, _T("LWPOLYLINE"), 8, _T("*"), NULL); if (GlobalFunc::SelectEntity(_T("\n请选择闭合PLINE:<退出>"), entPoly, rbMask2) == RTNORM) { XPoly2D poly(entPoly); poly.TransUCS(RBGroups(0), RBGroups(1)); RBList rbFence = poly.Fence(); XPoint ptLow, ptUp; poly.GetExtend(ptLow, ptUp); GlobalFunc::AssureInCurrentView(GlobalFunc::Ucs2Wcs(ptLow), GlobalFunc::Ucs2Wcs(ptUp)); ss.Get(_T("CP"), rbFence, NULL, rbMask); // CString sNot; // sNot.Format(_T("\n共得到%d个设备"),ss.Length()); // acutPrintf(sNot); } } //降序排列函数 bool CompareGradient(const double &dGradient1, const double &dGradient2) { if (dGradient1 >= dGradient2) { return true; } return false; } IMPLEMENT_DYNAMIC(CEditOutdoorPipeDlg, CModelessDialog) int CEditOutdoorPipeDlg::m_iPipeDn = 200; CEditOutdoorPipeDlg::CEditOutdoorPipeDlg(CWnd* pParent /*=NULL*/) : CModelessDialog(CEditOutdoorPipeDlg::IDD, pParent) { //{{AFX_DATA_INIT(CCheckPipeDlg) m_dDn = 0.0; m_sGradient = _T(""); //}}AFX_DATA_INIT m_iPipeSys = 3; m_dGradient = 0.0; m_dDn = m_iPipeDn; m_nCurPos = 200; m_bIsVisible = true; } CEditOutdoorPipeDlg::~CEditOutdoorPipeDlg() { m_vecIdPipe.clear(); m_vecIdAll.clear(); m_mapPipeGradient.clear(); } void CEditOutdoorPipeDlg::DoDataExchange(CDataExchange* pDX) { CModelessDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CCheckPipeDlg) DDX_Control(pDX, IDC_BTN_CHANGEPIPE, m_wndBtnChange); DDX_Control(pDX, IDC_BTN_SETPIPE, m_wndBtnSetPipe); DDX_Control(pDX, IDC_SCROLLBAR_DN, m_wndScrollBar); DDX_Control(pDX, IDC_LST_GRADIENT, m_wndLstGradient); DDX_Text(pDX, IDC_EDIT_PIPEDN, m_dDn); DDX_Scroll(pDX, IDC_SCROLLBAR_DN, m_nCurPos); DDX_CBIndex(pDX, IDC_CMB_PIPESYS, m_iPipeSys); DDX_Text(pDX, IDC_EDIT_GRADIENT, m_sGradient); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CEditOutdoorPipeDlg, CModelessDialog) //{{AFX_MSG_MAP(CCheckPipeDlg) ON_WM_VSCROLL() ON_BN_CLICKED(IDC_RADIO_DN1, OnRadioDn1) ON_BN_CLICKED(IDC_RADIO_DN2, OnRadioDn2) ON_BN_CLICKED(IDC_RADIO_DN3, OnRadioDn3) ON_BN_CLICKED(IDC_RADIO_DN4, OnRadioDn4) ON_BN_CLICKED(IDC_RADIO_DN5, OnRadioDn5) ON_BN_CLICKED(IDC_RADIO_DN6, OnRadioDn6) ON_BN_CLICKED(IDC_RADIO_DN7, OnRadioDn7) ON_BN_CLICKED(IDC_RADIO_DN8, OnRadioDn8) ON_BN_CLICKED(IDC_RADIO_DN9, OnRadioDn9) ON_LBN_SELCHANGE(IDC_LST_GRADIENT, OnSelchangeLstGradient) ON_WM_TIMER() ON_WM_CLOSE() ON_BN_CLICKED(IDC_BTN_SETPIPE, OnBtnSetPipe) ON_EN_CHANGE(IDC_EDIT_GRADIENT, OnChangeEditGradient) ON_CBN_SELCHANGE(IDC_CMB_PIPESYS, OnSelChangeCmbPipesys) ON_BN_CLICKED(IDC_BTN_CHANGEPIPE, OnBtnChangePipeByUser) //}}AFX_MSG_MAP END_MESSAGE_MAP() BOOL CEditOutdoorPipeDlg::OnInitDialog() { CModelessDialog::OnInitDialog(); m_wndScrollBar.SetScrollRange(200, 1100, TRUE); #if (ADS == 15) SetTimer(1, 2000, NULL); #else SetTimer(1, 200, NULL); #endif OnChangeEditGradient(); InitPipeColor(); InitBtnColor(); SetBtnColor(); SetBtnText(); return TRUE; } void CEditOutdoorPipeDlg::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) { m_nCurPos = pScrollBar->GetScrollPos(); switch(nSBCode) //处理滚动信息 { case SB_LINEUP: //向上的箭头被按下 { m_nCurPos -= 100; break; } case SB_LINEDOWN: //向下的箭头被按下 { m_nCurPos += 100; break; } case SB_THUMBTRACK: //鼠标拖动 { m_nCurPos = nPos; m_nCurPos = m_nCurPos / 100; m_nCurPos = m_nCurPos * 100; break; } } if (m_nCurPos < 200) { m_nCurPos = 200; } else if (m_nCurPos > 1100) { m_nCurPos = 1100; } pScrollBar->SetScrollPos(m_nCurPos); //更新信息 SetBtnColor(); SetBtnText(); CModelessDialog::OnVScroll(nSBCode, nPos, pScrollBar); } void CEditOutdoorPipeDlg::InitPipeColor() { m_mapPipeColor.insert(std::make_pair(200, 1)); m_mapPipeColor.insert(std::make_pair(300, 3)); m_mapPipeColor.insert(std::make_pair(400, 5)); m_mapPipeColor.insert(std::make_pair(500, 6)); m_mapPipeColor.insert(std::make_pair(600, 7)); m_mapPipeColor.insert(std::make_pair(700, 13)); m_mapPipeColor.insert(std::make_pair(800, 40)); m_mapPipeColor.insert(std::make_pair(900, 136)); m_mapPipeColor.insert(std::make_pair(1000, 165)); m_mapPipeColor.insert(std::make_pair(1100, 1)); m_mapPipeColor.insert(std::make_pair(1200, 3)); m_mapPipeColor.insert(std::make_pair(1300, 5)); m_mapPipeColor.insert(std::make_pair(1400, 6)); m_mapPipeColor.insert(std::make_pair(1500, 7)); m_mapPipeColor.insert(std::make_pair(1600, 13)); m_mapPipeColor.insert(std::make_pair(1700, 40)); m_mapPipeColor.insert(std::make_pair(1800, 136)); m_mapPipeColor.insert(std::make_pair(2000, 165)); } void CEditOutdoorPipeDlg::InitBtnColor() { m_mapBtnColor.insert(std::make_pair(200, RGB(255, 0, 0))); m_mapBtnColor.insert(std::make_pair(300, RGB(0, 255, 0))); m_mapBtnColor.insert(std::make_pair(400, RGB(0, 0, 255))); m_mapBtnColor.insert(std::make_pair(500, RGB(255, 0, 255))); m_mapBtnColor.insert(std::make_pair(600, RGB(255, 255, 255))); m_mapBtnColor.insert(std::make_pair(700, RGB(204, 102, 102))); m_mapBtnColor.insert(std::make_pair(800, RGB(255, 191, 0))); m_mapBtnColor.insert(std::make_pair(900, RGB(0, 127, 127))); m_mapBtnColor.insert(std::make_pair(1000, RGB(76, 95, 153))); m_mapBtnColor.insert(std::make_pair(1100, RGB(255, 0, 0))); m_mapBtnColor.insert(std::make_pair(1200, RGB(0, 255, 0))); m_mapBtnColor.insert(std::make_pair(1300, RGB(0, 0, 255))); m_mapBtnColor.insert(std::make_pair(1400, RGB(255, 0, 255))); m_mapBtnColor.insert(std::make_pair(1500, RGB(255, 255, 255))); m_mapBtnColor.insert(std::make_pair(1600, RGB(204, 102, 102))); m_mapBtnColor.insert(std::make_pair(1700, RGB(255, 191, 0))); m_mapBtnColor.insert(std::make_pair(1800, RGB(0, 127, 127))); m_mapBtnColor.insert(std::make_pair(2000, RGB(76, 95, 153))); } //全局定义按钮数组 UINT id[] = { IDC_RADIO_DN1, IDC_RADIO_DN2, IDC_RADIO_DN3, IDC_RADIO_DN4, IDC_RADIO_DN5, IDC_RADIO_DN6, IDC_RADIO_DN7, IDC_RADIO_DN8, IDC_RADIO_DN9, }; void CEditOutdoorPipeDlg::SetBtnColor() { int iIndex = m_nCurPos; for (int i = 0; i < 9; i++) { if (iIndex == 1900) { iIndex = 2000; } CWnd *pwnd = GetDlgItem(id[i]); CString sNote; sNote.Format(_T("%d"), iIndex); pwnd->SetWindowText(sNote); pwnd->ModifyStyle(0, BS_OWNERDRAW, 0); m_wndBtn[i].Attach(id[i], this); COLORREF color; std::map::iterator it; it = m_mapBtnColor.find(iIndex); if (it != m_mapBtnColor.end()) { color = (*it).second; } m_wndBtn[i].SetBackgroundColor(color); iIndex += 100; } } void CEditOutdoorPipeDlg::SetBtnText() { for (int i = 0; i < 9; i++) { CWnd *pwnd = GetDlgItem(id[i]); CString sTemp; pwnd->GetWindowText(sTemp); sTemp.Replace(_T("▲"), _T("")); int iIndex = _ttoi(sTemp); if (iIndex == m_iPipeDn) { pwnd->SetWindowText(_T("▲") + sTemp); } else { pwnd->SetWindowText(sTemp); } } } void CEditOutdoorPipeDlg::GetButtonAct(const int &iIndex) { CWnd *pwnd = GetDlgItem(id[iIndex]); CString sTemp; pwnd->GetWindowText(sTemp); sTemp.Replace(_T("▲"), _T("")); m_iPipeDn = _ttoi(sTemp); m_dDn = m_iPipeDn; SetBtnText(); SetGradientList(); UpdateData(FALSE); OnSelchangeLstGradient(); } void CEditOutdoorPipeDlg::OnRadioDn1() { GetButtonAct(0); } void CEditOutdoorPipeDlg::OnRadioDn2() { GetButtonAct(1); } void CEditOutdoorPipeDlg::OnRadioDn3() { GetButtonAct(2); } void CEditOutdoorPipeDlg::OnRadioDn4() { GetButtonAct(3); } void CEditOutdoorPipeDlg::OnRadioDn5() { GetButtonAct(4); } void CEditOutdoorPipeDlg::OnRadioDn6() { GetButtonAct(5); } void CEditOutdoorPipeDlg::OnRadioDn7() { GetButtonAct(6); } void CEditOutdoorPipeDlg::OnRadioDn8() { GetButtonAct(7); } void CEditOutdoorPipeDlg::OnRadioDn9() { GetButtonAct(8); } int CEditOutdoorPipeDlg::GetPipeSys() { return m_iPipeSys; } void CEditOutdoorPipeDlg::InitPipeDnGradient() { m_mapPipeGradient.clear(); std::vector::iterator it; AcDbObjectId id; CDbPipe *pPipe = NULL; //遍历选中的管线,根据其管径设置其颜色并初始化改管径对应的坡度列表 for (it = m_vecIdSel.begin(); it != m_vecIdSel.end(); it++) { id = *it; acdbOpenObject(pPipe, id, AcDb::kForRead); if (pPipe != NULL) { double dDn = pPipe->GetDnDiameter(); double dGradient = pPipe->GetPipeGradient(); std::map >::iterator it = m_mapPipeGradient.find(dDn); if (it != m_mapPipeGradient.end()) { bool bHasGra = false; std::vector vec = (*it).second; std::vector::iterator itVec = vec.begin(); //去除重复的坡度 for (; itVec != vec.end(); itVec++) { if (dGradient == *itVec) { bHasGra = true; } } if (!bHasGra) { vec.push_back(dGradient); } (*it).second = vec; } else { std::vector vec; vec.push_back(dGradient); m_mapPipeGradient.insert(std::make_pair(dDn, vec)); } pPipe->close(); } } } void CEditOutdoorPipeDlg::SetGradientList() { InitPipeDnGradient(); std::vector vec; std::map >::iterator it = m_mapPipeGradient.find(m_iPipeDn); if (it != m_mapPipeGradient.end()) { vec = (*it).second; } else { m_sGradient = _T("");; UpdateData(FALSE); OnChangeEditGradient(); m_wndLstGradient.ResetContent(); return; } m_wndLstGradient.ResetContent(); std::sort(vec.begin(), vec.end(), CompareGradient); std::vector::iterator itVec = vec.begin(); CString sTemp; for (; itVec != vec.end(); itVec++) { sTemp.Format(_T("%0.4f"), *itVec); if (m_wndLstGradient.FindString(0, sTemp) == LB_ERR) { m_wndLstGradient.AddString(sTemp); } } m_wndLstGradient.AddString(_T("全部")); m_wndLstGradient.SetCurSel(m_wndLstGradient.GetCount() - 1); } BOOL CEditOutdoorPipeDlg::GetPipeColor(int &nColor, double dDn) { BOOL bRet = FALSE; std::map::iterator it; it = m_mapPipeColor.find(dDn); if (it != m_mapPipeColor.end()) { bRet = TRUE; nColor = (*it).second; } return bRet; } void CEditOutdoorPipeDlg::GetPipeOriginColor(PickSet &ssSel) { AcDbObjectId id; CDbPipe *pPipe = NULL; for (long i = 0; i < ssSel.Length(); i++) { acdbGetObjectId(id, ssSel[i]); acdbOpenObject(pPipe, id, AcDb::kForRead); if (pPipe != NULL) { int nColor = pPipe->colorIndex(); if (m_mapOriginColor.find(id) == m_mapOriginColor.end()) { m_mapOriginColor.insert(std::make_pair(id, nColor)); } pPipe->close(); } } } void CEditOutdoorPipeDlg::RecoverPipeOriginColor() { std::map::iterator it; CDbPipe *pPipe = NULL; AcDbObjectId id; for (it = m_mapOriginColor.begin(); it != m_mapOriginColor.end(); it++) { id = (*it).first; acdbOpenObject(pPipe, id, AcDb::kForWrite); if (pPipe != NULL) { int iIndex = (*it).second; pPipe->setColorIndex(iIndex); pPipe->close(); } } } //list选取不同的坡度值时,取得相应管径和对应坡度值的管线 void CEditOutdoorPipeDlg::OnSelchangeLstGradient() { int iSel = 0; bool bIsAll = false; CString sTemp; iSel = m_wndLstGradient.GetCurSel(); if (iSel < 0) { ShowPipe(true); m_vecIdPipe.clear(); m_sGradient = _T(""); UpdateData(FALSE); OnChangeEditGradient(); return; } m_wndLstGradient.GetText(iSel, sTemp); if (sTemp == _T("全部")) { m_wndLstGradient.GetText(0, sTemp); bIsAll = true; } m_dGradient = _tstof(sTemp); ShowPipe(true); m_vecIdPipe.clear(); std::vector::iterator it; AcDbObjectId id; CDbPipe *pPipe = NULL; for (it = m_vecIdSel.begin(); it != m_vecIdSel.end(); it++) { id = *it; acdbOpenObject(pPipe, id, AcDb::kForRead); if (pPipe != NULL) { double dDn = pPipe->GetDnDiameter(); double dGradient = pPipe->GetPipeGradient(); if (bIsAll)//选择“全部”时 { if (dDn == m_iPipeDn) { m_vecIdPipe.push_back(id); } } else { if (dDn == m_dDn && dGradient == m_dGradient) { m_vecIdPipe.push_back(id); } } pPipe->close(); } } m_sGradient.Format(_T("%0.4f"), m_dGradient); UpdateData(FALSE); OnChangeEditGradient(); } void CEditOutdoorPipeDlg::ShowPipe(bool bIsShow) { std::vector::iterator it; CDbPipe *pPipe = NULL; AcDbObjectId idPipe = NULL; for (it = m_vecIdPipe.begin(); it != m_vecIdPipe.end(); it++) { pPipe = NULL; idPipe = *it; AcApDocument* pDoc = acDocManager->curDocument(); acDocManager->lockDocument(pDoc, AcAp::kWrite); acdbOpenObject(pPipe, idPipe, AcDb::kForWrite); if (pPipe == NULL) { continue; } if (bIsShow) { pPipe->setVisibility(AcDb::kVisible); } else { pPipe->setVisibility(AcDb::kInvisible); } pPipe->close(); acedUpdateDisplay(); actrTransactionManager->flushGraphics(); acDocManager->unlockDocument(pDoc); } } void CEditOutdoorPipeDlg::ChangePipeColorDnGradient()//根据输入值修改选取管线的管径和坡度 { UpdateData(TRUE); std::vector::iterator it; CDbPipe *pPipe = NULL; int iNum = 0; m_dGradient = _tstof(m_sGradient); AcDbObjectId id; for (it = m_vecIdPipe.begin(); it != m_vecIdPipe.end(); it++) // 设定管径和坡度 { id = *it; AcApDocument* pDoc = acDocManager->curDocument(); acDocManager->lockDocument(pDoc, AcAp::kWrite); acdbOpenObject(pPipe, id, AcDb::kForWrite); if (pPipe != NULL) { pPipe->SetDnDiameter(m_dDn); pPipe->SetPipeGradient(m_dGradient); iNum++; int nColor; if (GetPipeColor(nColor, m_dDn)) { pPipe->setColorIndex(nColor); } pPipe->close(); } acedUpdateDisplay(); actrTransactionManager->flushGraphics(); acDocManager->unlockDocument(pDoc); } ShowPipe(true); m_vecIdPipe.clear(); //重新读取设定后的管线管径和坡度 SetGradientList(); UpdateData(FALSE); OnSelchangeLstGradient(); CString sNote = _T(""); sNote.Format(_T("\n已完成%d条管道赋值:<退出>"), iNum); acutPrintf(sNote); } void CEditOutdoorPipeDlg::ChangePipeColor(PickSet &ssSel) { m_vecIdAll.clear(); AcDbObjectId id; for (long i = 0; i < ssSel.Length(); i++) { OPENOBJ_BEGIN(ssSel[i], AcDb::kForWrite, CDbPipe, pPipe); if (pPipe != NULL) { acdbGetObjectId(id, ssSel[i]); m_vecIdAll.push_back(id); int nColor; if (GetPipeColor(nColor, pPipe->GetDnDiameter())) { pPipe->setColorIndex(nColor); } } OPENOBJ_END(); } } void CEditOutdoorPipeDlg::OnBtnSetPipe() //修改闪烁管线管径和坡度 { ChangePipeColorDnGradient(); } void CEditOutdoorPipeDlg::OnBtnChangePipeByUser() //选择管线进行管径和坡度值修改 { SetPipeBySel(); } void SetPipeSys(const int &iType, RBList &rbMask) // 根据系统类型选取该类型的管线 { struct resbuf *pBuf; if (iType == 0) { pBuf = ads_buildlist(RTDXF0, _T("AEC_ZT_PIPE"), 8, LAY_PIPE_DIRT, NULL); } else if (iType == 1) { pBuf = ads_buildlist(RTDXF0, _T("AEC_ZT_PIPE"), 8, LAY_PIPE_RAIN, NULL); } else if (iType == 2) { pBuf = ads_buildlist(RTDXF0, _T("AEC_ZT_PIPE"), 8, LAY_PIPE_USELESS, NULL); } else { pBuf = ads_buildlist( -4, _T(""), -4, _T(""), -4, _T(""), -4, _T("or>"), NULL); } rbMask.Append(pBuf); } void CEditOutdoorPipeDlg::SetPipeBySel() { if (!UpdateData(TRUE)) { return; } ShowPipe(true); m_vecIdPipe.clear(); RBList rbMask; SetPipeSys(m_iPipeSys, rbMask); ShowWindow(SW_HIDE); PickSet ss(SS_FREE); if (GlobalFunc::SelectEntities(_T("\n请选择需要设置管径坡度的管段:<退出>"), ss, rbMask) != RTNORM) { GlobalFunc::PostCommand(_T("\3")); return; } GetPipeOriginColor(ss); for (long l = 0; l < ss.Length(); l++) { AcDbObjectId id; acdbGetObjectId(id, ss[l]); m_vecIdPipe.push_back(id); } ChangePipeColorDnGradient(); ShowWindow(SW_SHOW); } void CEditOutdoorPipeDlg::OnChangeEditGradient() { UpdateData(); if (m_sGradient.IsEmpty())//坡度值为空时,不能修改管线 { m_wndBtnSetPipe.EnableWindow(false); m_wndBtnChange.EnableWindow(false); } else { m_wndBtnSetPipe.EnableWindow(true); m_wndBtnChange.EnableWindow(true); } } void CEditOutdoorPipeDlg::OnTimer(UINT_PTR nIDEvent) { ShowPipe(m_bIsVisible); m_bIsVisible = !m_bIsVisible; CModelessDialog::OnTimer(nIDEvent); } void CEditOutdoorPipeDlg::OnClose() { DestroyWindow(); GlobalFunc::PostCommand(_T("\3")); } void CEditOutdoorPipeDlg::OnSelChangeCmbPipesys()//更新系统类型 { UpdateData(TRUE); CString sTemp; if (m_iPipeSys == 0)//污水 { sTemp = LAY_PIPE_DIRT; } else if (m_iPipeSys == 1)//雨水 { sTemp = LAY_PIPE_RAIN; } else if (m_iPipeSys == 2)//废水 { sTemp = LAY_PIPE_USELESS; } else //全部 { m_vecIdSel = m_vecIdAll; SetGradientList(); OnSelchangeLstGradient(); return; } std::vector::iterator it; m_vecIdSel.clear(); CString sLayer; ads_name ssName; for (it = m_vecIdAll.begin(); it != m_vecIdAll.end(); it++) { acdbGetAdsName(ssName, *it); sLayer = GlobalFunc::GetPipeLayer(ssName); if(sTemp.Compare(sLayer) == 0) { m_vecIdSel.push_back(*it); } } SetGradientList();//重新读取坡度值列表 OnSelchangeLstGradient();//重新设定当前闪烁对象 } void CEditOutdoorPipeDlg::SetPipes(PickSet &ss) { GetPipeOriginColor(ss); ChangePipeColor(ss); OnSelChangeCmbPipesys(); SetGradientList(); } BOOL CEditOutdoorPipeDlg::DestroyWindow() { KillTimer(103); ShowPipe(true); RecoverPipeOriginColor(); return CModelessDialog::DestroyWindow(); } void EditOutdoorPipe() { GlobalFunc::DocGetPickFirst().Free(); //清空当前选择集,避免执行命令前已选择实体 PickSet ss(SS_FREE); RBList rbMask = ads_buildlist( -4, _T(""), -4, _T(""), -4, _T(""), -4, _T("or>"), NULL); TCHAR cRet; int ret(0); INITGET_BEG(0, _T("P A")); ret = GlobalFunc::SelectEntities(_T("\n请选择查询管网的范围{选取闭合PLINE线(P)/整张图(A)}:<退出>"), ss, rbMask, _T("P A"), cRet); INITGET_END(); if (cRet == _T('P')) { GetEquipmentFromPline(ss, rbMask); if (ss.Length() == 0) { acutPrintf(_T("没有选择到管线,请重新选择!")); return; } } else if (cRet == _T('A')) { ss.Get(_T("X"), NULL, NULL, rbMask); } else if(ret == RTCAN) { return; } else if (ret != RTNORM) { return; } if (ss.Length() == 0) { return; } CTemporaryResourceOverride vTemp; CEditOutdoorPipeDlg dlg(acedGetAcadFrame()); dlg.Create(IDD_EDIT_OUTDOORPIPE, acedGetAcadFrame()); dlg.ShowWindow(SW_SHOW); acedGetAcadDwgView()->SetFocus(); dlg.SetPipes(ss); TCHAR sz[10]; acedGetString(0, _T(""),sz); dlg.DestroyWindow(); }