// PolyHoleDlg.cpp : implementation file // #include "stdafx.h" #include "resource.h" #include "OpeningValidation.h" #include "InsertOpeningDlg.h" #include "PolyHoleDlg.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CPolyHoleDlg dialog #define AUTO_LABEL_FLAG _T("自动编号") CString CPolyHoleDlg::m_csLabel = AUTO_LABEL_FLAG; CPolyHoleDlg::CPolyHoleDlg(CWnd* pParent /*=NULL*/) : GlwCAcUiDialog(CPolyHoleDlg::IDD, pParent) { //{{AFX_DATA_INIT(CPolyHoleDlg) m_csDepth = _T("200"); // m_csLabel = _T(""); m_bBoreHole = TRUE; //}}AFX_DATA_INIT m_nHoleStyle=0; // 0, 1, 2 m_bEditDlgFlag = false; // 默认不是编辑状态。 } void CPolyHoleDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CPolyHoleDlg) DDX_CBString(pDX, IDC_HOLE_DEPTH, m_csDepth); DDX_Text(pDX, IDC_CMB_LABEL, m_csLabel); DDX_Check(pDX, IDC_BORE_HOLE, m_bBoreHole); DDX_Control(pDX, IDC_CMB_LABEL, m_cmbLabel); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CPolyHoleDlg, GlwCAcUiDialog) //{{AFX_MSG_MAP(CPolyHoleDlg) ON_WM_PAINT() ON_BN_CLICKED(IDC_HOLE_STYLE, OnHoleStyle) ON_WM_SETCURSOR() ON_BN_CLICKED(IDC_BORE_HOLE, OnBoreHole) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CPolyHoleDlg message handlers BOOL CPolyHoleDlg::OnInitDialog() { CDialog::OnInitDialog(); GetDlgItem(IDC_HOLE_DEPTH)->EnableWindow(!m_bBoreHole); // TODO: Add extra initialization here ShowHoleStyle(TRUE); UpdateData(FALSE); SetupLabelList(); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void CPolyHoleDlg::ShowHoleStyle(BOOL bReLoad) { XString sFile(256); sFile << "TArch(HoleST" << (m_nHoleStyle+1) << ")"; //if (FindFile(sFile, sFilePath)) { CWnd *pImageBox=GetDlgItem(IDC_HOLE_STYLE); if (pImageBox) { CDC *pDC=pImageBox->GetDC(); if (bReLoad) { CRect rc; pImageBox->GetClientRect(&rc); m_slideDc.InitDC(pDC, rc, GetAcadBackColor()); m_slideDc.PaintSlide(sFile); } else { m_slideDc.SetDC(pDC); m_slideDc.Redraw(); } m_slideDc.SetDC(NULL); pImageBox->ReleaseDC(pDC); } //} } BOOL CPolyHoleDlg::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message) { CWnd *pImageBox=GetDlgItem(IDC_HOLE_STYLE); if (pWnd && pImageBox && (pWnd->m_hWnd==pImageBox->m_hWnd)) { CAcModuleResourceOverride vTemp; HCURSOR hIcon = AfxGetApp()->LoadCursor( IDC_CUR_PICK ); SetCursor( hIcon ); return TRUE; } return CDialog::OnSetCursor(pWnd, nHitTest, message); } void CPolyHoleDlg::OnPaint() { CPaintDC dc(this); // device context for painting CRect rcClip, rcImage; dc.GetClipBox(&rcClip); CWnd *pImageBox=GetDlgItem(IDC_HOLE_STYLE); if (pImageBox) { pImageBox->GetWindowRect(&rcImage); ScreenToClient(&rcImage); if (!rcImage.IntersectRect(&rcImage, &rcClip)) return; ShowHoleStyle(FALSE); } // Do not call CDialog::OnPaint() for painting messages } void CPolyHoleDlg::OnHoleStyle() { m_nHoleStyle++; if (m_bBoreHole) { if (m_nHoleStyle>3) m_nHoleStyle=0; } else { if (m_nHoleStyle>5) m_nHoleStyle=4; } ShowHoleStyle(TRUE); } void CPolyHoleDlg::Dlg2Obj(TDbOpening &op) { // sg modify 110804,解决异形洞对象编辑对话框中的编号设为“自动编号”不起作用,程序会直接标注“自动编号”四个字 // op.SetLabel(m_csLabel); CString csTrueLabel = GetLabel(&op); op.SetLabel(csTrueLabel); if (m_bBoreHole) op.m_nOpStyle &= ~OPS_NOT_BORE; else op.m_nOpStyle |= OPS_NOT_BORE; op.SetThickness(_tstof(m_csDepth)); if (m_nHoleStyle==0) { op.m_nOpStyle &= ~ OPS_HOLE_FLAG1; op.m_nOpStyle &= ~ OPS_HOLE_FLAG2; op.m_nOpStyle &= ~ OPS_ATHIGH; } else if (m_nHoleStyle==1) { op.m_nOpStyle |= OPS_HOLE_FLAG1; op.m_nOpStyle &= ~OPS_HOLE_FLAG2; op.m_nOpStyle &= ~ OPS_ATHIGH; } else if (m_nHoleStyle==2) { op.m_nOpStyle &= ~OPS_HOLE_FLAG1; op.m_nOpStyle |= OPS_HOLE_FLAG2; op.m_nOpStyle &= ~ OPS_ATHIGH; } else if (m_nHoleStyle==3) { op.m_nOpStyle |= OPS_HOLE_FLAG1; op.m_nOpStyle |= OPS_HOLE_FLAG2; op.m_nOpStyle |= OPS_ATHIGH; } else if (m_nHoleStyle==4) { //不穿透的剖到的洞 op.m_nOpStyle &= ~OPS_ATHIGH; } else if (m_nHoleStyle==5) { op.m_nOpStyle |= OPS_ATHIGH; } } /////////////////////////////////////////////////////////// // 根据给定的门窗, 设置对话框参数 void CPolyHoleDlg::Obj2Dlg(const TDbOpening &op) { if (op.m_nOpStyle&OPS_NOT_BORE) m_bBoreHole=FALSE; else m_bBoreHole=TRUE; if (m_bBoreHole) { if (!(op.m_nOpStyle&OPS_HOLE_FLAG1) && !(op.m_nOpStyle&OPS_HOLE_FLAG2)) m_nHoleStyle=0; else if ((op.m_nOpStyle&OPS_HOLE_FLAG1) && !(op.m_nOpStyle&OPS_HOLE_FLAG2)) m_nHoleStyle=1; else if (!(op.m_nOpStyle&OPS_HOLE_FLAG1) && (op.m_nOpStyle&OPS_HOLE_FLAG2)) m_nHoleStyle=2; else m_nHoleStyle=3; } else { if (op.m_nOpStyle&OPS_ATHIGH) m_nHoleStyle=5; else m_nHoleStyle=4; } m_csDepth = (const TCHAR *)Dist2Str(op.GetThickness()); m_csLabel = op.GetLabel(); } void CPolyHoleDlg::OnBoreHole() { // TODO: Add your control notification handler code here BOOL bOldFlag=m_bBoreHole; UpdateData(TRUE); GetDlgItem(IDC_HOLE_DEPTH)->EnableWindow(!m_bBoreHole); if (bOldFlag!=m_bBoreHole) { m_nHoleStyle=m_bBoreHole? 0 : 4; ShowHoleStyle(TRUE); } } void CPolyHoleDlg::SetupLabelList() { CString csTemp; m_cmbLabel.GetWindowText(csTemp); m_cmbLabel.ResetContent(); XStringList lstLabels; if (GetLabelListFromDwg(lstLabels)) { lstLabels.QuickSort(_tcscmp); m_cmbLabel.AddString(AUTO_LABEL_FLAG); for(int i=0; i &dbList, DList &idList); BOOL CPolyHoleDlg::GetLabelListFromDwg(XStringList &lstLabels) const { // 初始化编号 DList lstBayWinEnt; DList dbList; GetOpeningIdList(dbList, lstBayWinEnt); TOpeningValidateTable opTable; for(int i=0; iGetKind()==TOpeningData::OP_HOLE && !(pOpening->m_nOpStyle&OPS_LIFTDOOR) && !(pOpening->m_nOpStyle&OPS_LVTRY) && _tcsicmp(pOpening->GetSubKind(), _T("隔断门"))!=0 && // sg add 110309,增加对新增子类型的判断 _tcsicmp(pOpening->GetSubKind(), _T("电梯门"))!=0) { opTable.Validate(pOpening); } OPENOBJ_END(); } opTable.GetValidLabels(TOpeningData::OP_HOLE, lstLabels); return TRUE; } CString CPolyHoleDlg::GetLabel(TDbOpening *pPolyHole) { CString strLabel = m_csLabel; // m_cmbLabel.GetWindowText(strLabel); if (strLabel.Compare(AUTO_LABEL_FLAG) == 0) { return CInsertOpeningDlg::CalcAutoLabel(pPolyHole); } else { return strLabel; } } void AddStringToCombo(CComboBox &cmb, CString &strText); void CPolyHoleDlg::AfterModelAdded(TDbOpening *pPolyHole) { // 模态对话框,不需要做这个。 // if (pPolyHole != NULL) // AddStringToCombo(m_cmbLabel, CString(pPolyHole->GetLabel())); } void CPolyHoleDlg::OnOK() { UpdateData(TRUE); CDialog::OnOK(); }