// WallDlg.cpp : implementation file // #include "stdafx.h" #include "resource.h" #include "WallDlg.h" // NO MSG is required #include "TgAs.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif int OsGetPointWall(double *ptFrom, const TCHAR *prompt, XPoint &pt, const TCHAR *kword=NULL, int *kwordId=NULL, BOOL *bDiscontinue=NULL); ///////////////////////////////////////////////////////////////////////////// // CWallDlg dialog //---add by fxj----- BOOL CWallDlg::m_bgroupStatus = FALSE; IMPLEMENT_DYNAMIC(CWallDlg,CObjPreviewDlg) CWallDlg::CWallDlg(const TDbWall &wall, CWnd* pParent /*=NULL*/) : CObjPreviewDlg(IDD,pParent) { m_nUse = 0; m_pWall = (TDbWall*)wall.clone(); Obj2Dlg(m_pWall); } CWallDlg::~CWallDlg() { if (!m_pWall) delete m_pWall; } void CWallDlg::DoDataExchange(CDataExchange* pDX) { CObjPreviewDlg::DoDataExchange(pDX); //{{AFX_DATA_MAP(CWallDlg) // DDX_Text(pDX, IDC_BASE_ELEVATION, m_csElevation); // ----------Modified by fxj 080528------------- DDX_Control(pDX, IDC_LIST_DATA, m_listCtrl); DDX_Check(pDX, IDC_CHECK_LEFT, m_bLeftInsulate); DDX_Check(pDX, IDC_CHECK_RIGHT, m_bRightInsulate); // sg add 100511,增加墙端头保温 DDX_Check(pDX, IDC_CHECK_STEM, m_bStemInsulate); // modified by fxj 090504 if (pDX->m_bSaveAndValidate) { CString sLeftWidth, sRightWidth, sInsulateThick, sInsulateThick2; DDX_Text(pDX, IDC_LEFT_WIDTH, sLeftWidth); DDX_Text(pDX, IDC_RIGHT_WIDTH, sRightWidth); DDX_Text(pDX, IDC_INSULATE_THICK, sInsulateThick); DDX_Text(pDX, IDC_INSULATE_THICK2, sInsulateThick2); m_nLeftWidth=_tstof(sLeftWidth); m_nRightWidth=_tstof(sRightWidth); m_dInsulateThick=_tstof(sInsulateThick); m_dInsulateThick2=_tstof(sInsulateThick2); } else { CString sLeftWidth, sRightWidth, sInsulateThick, sInsulateThick2; sLeftWidth.Format(_T("%lg"), m_nLeftWidth); sRightWidth.Format(_T("%lg"), m_nRightWidth); sInsulateThick.Format(_T("%lg"), m_dInsulateThick); sInsulateThick2.Format(_T("%lg"), m_dInsulateThick2); DDX_Text(pDX, IDC_LEFT_WIDTH, sLeftWidth); DDX_Text(pDX, IDC_RIGHT_WIDTH, sRightWidth); DDX_Text(pDX, IDC_INSULATE_THICK, sInsulateThick); DDX_Text(pDX, IDC_INSULATE_THICK2, sInsulateThick2); } DDX_Control(pDX,IDC_GROUP3,m_group); DDX_GroupStatus(pDX,IDC_GROUP3,m_bgroupStatus); DDX_Control(pDX, IDC_HEIGHT, m_comHeight); DDX_CBString(pDX, IDC_HEIGHT, m_csWallHeight); DDX_CBString(pDX, IDC_ELEV, m_csWallElev); if (pDX->m_bSaveAndValidate && _tstof(m_csWallHeight)<-_DIST_SNAP) pDX->Fail(); // add by xly on 110304 墙体对象编辑时更新墙体数据 if (!pDX->m_bSaveAndValidate) { m_comHeight.SetWindowText(m_csWallHeight); } DDX_Text(pDX, IDC_WALL_RADIUS, m_csRadius); DDX_CBIndex(pDX, IDC_MATERIAL, m_nStyle); DDX_CBIndex(pDX, IDC_COMBO_USE, m_nUse); // [2010-3-25 wubo] C004-08 当墙体用途设为虚墙时,除用途外,所有控件都变灰。 bool bEnable = m_nUse != 3; GetDlgItem(IDC_HEIGHT)->EnableWindow(bEnable); // 墙高 GetDlgItem(IDC_ELEV)->EnableWindow(bEnable); // 底高 GetDlgItem(IDC_LEFT_WIDTH)->EnableWindow(bEnable); // 左宽 GetDlgItem(IDC_RIGHT_WIDTH)->EnableWindow(bEnable); // 右宽 GetDlgItem(IDC_LIST_DATA)->EnableWindow(bEnable); // 宽度列表 GetDlgItem(IDC_BUTTON_LEFT)->EnableWindow(bEnable); // 【左】按钮 GetDlgItem(IDC_BUTTON_MID)->EnableWindow(bEnable); // 【右】按钮 GetDlgItem(IDC_BUTTON_RIGHT)->EnableWindow(bEnable); // 【中】按钮 GetDlgItem(IDC_BUTTON_CHANGE)->EnableWindow(bEnable); // 【交换】按钮 GetDlgItem(IDC_CHECK_LEFT)->EnableWindow(bEnable); // 左侧保温 GetDlgItem(IDC_CHECK_RIGHT)->EnableWindow(bEnable); // 右侧保温 GetDlgItem(IDC_CHECK_PARTEDIT)->EnableWindow(bEnable); // 【选侧墙段】按钮 // sg add 100906,只有墙体某侧有保温时,“墙端保温”才可编辑 bEnable = (m_nUse!=3) && (m_bLeftInsulate || m_bRightInsulate); GetDlgItem(IDC_CHECK_STEM)->EnableWindow(bEnable); // 端头保温 // sg add 100511,当墙体用途为矮墙时,“材料”一项变灰 bEnable = m_nUse!=3 && m_nUse!=4; GetDlgItem(IDC_MATERIAL)->EnableWindow(bEnable); // 材料 // sg add 100511,根据是否设置保温,控制保温层厚是否可以编辑 bEnable = m_nUse!=3 && m_bLeftInsulate; GetDlgItem(IDC_INSULATE_THICK)->EnableWindow(bEnable); // 保温层厚1 bEnable = m_nUse!=3 && m_bRightInsulate; GetDlgItem(IDC_INSULATE_THICK2)->EnableWindow(bEnable); // 保温层厚2 } BEGIN_MESSAGE_MAP(CWallDlg, CObjPreviewDlg) //{{AFX_MSG_MAP(CWallDlg) ON_WM_CTLCOLOR() //-------------delete by fxj 080528-------- // ON_BN_CLICKED(IDC_CHECK_PARTEDIT, OnBnClickedCheckPartedit) // ON_BN_CLICKED(IDC_BUTTON_SELECT, OnBnClickedButtonSelect) // -------------add by fxj 080528---------------- ON_CBN_SELCHANGE(IDC_MATERIAL, OnSelchangeMaterial) ON_LBN_SELCHANGE(IDC_LIST_DATA, OnSelchangeListData) ON_BN_CLICKED(IDC_BUTTON_LEFT, OnButtonLeft) ON_BN_CLICKED(IDC_BUTTON_MID, OnButtonMid) ON_BN_CLICKED(IDC_BUTTON_RIGHT, OnButtonRight) ON_BN_CLICKED(IDC_BUTTON_CHANGE, OnButtonChange) ON_BN_CLICKED(IDC_CHECK_LEFT, OnCheckLeftIns) ON_BN_CLICKED(IDC_CHECK_RIGHT,OnCheckRightIns) ON_EN_CHANGE(IDC_INSULATE_THICK,OnChangeInsThick) ON_EN_CHANGE(IDC_WALL_RADIUS,OnChangeRadius) ON_EN_CHANGE(IDC_LEFT_WIDTH,OnChangeLeftWidth) ON_EN_CHANGE(IDC_RIGHT_WIDTH,OnChangeRightWidth) ON_EN_KILLFOCUS(IDC_INSULATE_THICK,OnKFInsThick) ON_EN_KILLFOCUS(IDC_LEFT_WIDTH,OnKFLeftWidth) ON_EN_KILLFOCUS(IDC_RIGHT_WIDTH,OnKFRightWidth) ON_EN_KILLFOCUS(IDC_WALL_RADIUS,OnKFRadius) // sg add 100511,增加墙端头保温 ON_BN_CLICKED(IDC_CHECK_STEM, OnCheckStemIns) //}}AFX_MSG_MAP ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTW, 0, 0xFFFF, OnToolTipText) ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTA, 0, 0xFFFF, OnToolTipText) // [2010-3-25 wubo] C004-08 当墙体用途设为虚墙时,除用途外,所有控件都变灰。 ON_CBN_SELCHANGE(IDC_COMBO_USE, OnCbnSelchangeComboUse) END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CWallDlg message handlers BOOL CWallDlg::OnInitDialog() { CObjPreviewDlg::OnInitDialog(); // sg add 100714,增加左侧保温、右侧保温对应的控件显示名称,区分内墙、外墙显示不同 GetDlgItem(IDC_CHECK_LEFT)->SetWindowText(m_csLeftCheckName); GetDlgItem(IDC_CHECK_RIGHT)->SetWindowText(m_csRightCheckName); if (_tstof(m_csRadius)<_DIST_SNAP) { GetDlgItem(IDC_WALL_RADIUS)->EnableWindow(FALSE); } // m_selectButton.EnableWindow(m_bpartEdit);// Add By LCF 2004/07/01 //---------add by fxj 080528---------- m_wndToolTip.Create(this); m_wndToolTip.Activate(true); m_wndToolTip.SetDelayTime(TTDT_INITIAL, 500); CWnd *pWnd = GetDlgItem(IDC_LIST_DATA); m_wndToolTip.AddTool(pWnd, _T("按Delete键删除墙厚数据")); CComboBox *pBox = (CComboBox*)GetDlgItem(IDC_MATERIAL); pBox->ResetContent(); pBox->AddString(WALLMATE_Concrete); pBox->AddString(WALLMATE_Concrete1); pBox->AddString(WALLMATE_Brick); pBox->AddString(WALLMATE_Brick1); pBox->AddString(WALLMATE_Rocket); pBox->AddString(WALLMATE_Rocket1); pBox->AddString(WALLMATE_Fill); pBox->AddString(WALLMATE_Fill1); pBox->AddString(WALLMATE_Fill2); pBox->AddString(WALLMATE_Divider); pBox->AddString(WALLMATE_Curtain); pBox->SetCurSel(m_nStyle); CComboBox *pBox1 = (CComboBox*)GetDlgItem(IDC_COMBO_USE); pBox1->ResetContent(); pBox1->AddString(_T("外墙")); pBox1->AddString(_T("内墙")); pBox1->AddString(_T("分户墙")); pBox1->AddString(_T("虚墙")); pBox1->AddString(_T("矮墙")); pBox1->AddString(_T("卫生隔断")); pBox1->SetCurSel(m_nUse); OnSelchangeMaterial(); UpdateData(FALSE); UpdateImage(); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void CWallDlg::OnChangeLeftWidth() { UpdateImage(); } void CWallDlg::OnChangeRightWidth() { UpdateImage(); } void CWallDlg::OnChangeInsThick() { UpdateImage(); } void CWallDlg::OnChangeRadius() { UpdateImage(); } void CWallDlg::OnKFInsThick() { if (GetDlgItem(IDCANCEL)!=GetFocus()) UpdateImage(); } void CWallDlg::OnKFLeftWidth() { if (GetDlgItem(IDCANCEL)!=GetFocus()) UpdateImage(); } void CWallDlg::OnKFRightWidth() { if (GetDlgItem(IDCANCEL)!=GetFocus()) UpdateImage(); } void CWallDlg::OnKFRadius() { if (GetDlgItem(IDCANCEL)!=GetFocus()) UpdateImage(); } AcDbEntity *CWallDlg::NewObject() { TDbWall* pWall=TDbWall::cast(m_pWall->clone()); AcDbObjectId idSurf=pWall->GetLayerSurf2d(); if (!idSurf.isValid()) pWall->SetLayerSurf2d(InitLayer(LAY_SURFACE)); return pWall; } void CWallDlg::Dlg2Obj(AcDbEntity *pObj) { TDbWall *pWall = TDbWall::cast(pObj); ASSERT(pObj); if (pWall->Is(CURVE_ARC)) // 改变半径 { double nChordLen = pWall->XLine::GetLength(); if (nChordLen<2.0*_tstof(m_csRadius)-1.0E-6) { BOOL bOverPi = (pWall->GetBulge()>PI); double nAng = 2.0*asin(nChordLen/2.0/_tstof(m_csRadius)); if (!bOverPi) pWall->SetBulge(nAng); else pWall->SetBulge(2*PI-nAng); } } pWall->ChangeElevation(_tstof(m_csWallElev), FALSE); // modified by fxj 090309 double fHeight = 0; if (m_csWallHeight==_T("当前层高")) fHeight = DocGetLHeight(); else fHeight = _tstof(m_csWallHeight); pWall->SetHeight(fHeight); // _tstof(m_csWallHeight)); // ---------modified by fxj 080528------ pWall->SetWidth(0, m_nLeftWidth); pWall->SetWidth(1, m_nRightWidth); pWall->SetInsulateOnSide(OFFSET_LEFT, m_bLeftInsulate); pWall->SetInsulateOnSide(OFFSET_RIGHT, m_bRightInsulate); pWall->SetInsulateThick(m_dInsulateThick, OFFSET_LEFT); // sg add 100511,设置两侧保温层厚 pWall->SetInsulateThick(m_dInsulateThick2, OFFSET_RIGHT); // sg add 100511,设置是否设置墙端头保温 pWall->SetInsulateEnd(m_bStemInsulate); TWallData::TWallStyle st = TWallData::kBrick; // 砖墙 CString sT20Mat = WALLMATE_Brick; switch(m_nStyle) { case 0: sT20Mat = WALLMATE_Concrete; st = TWallData::kConcrete; break; case 1: sT20Mat = WALLMATE_Concrete1; st = TWallData::kConcrete; break; case 2: sT20Mat = WALLMATE_Brick; st = TWallData::kBrick; break; case 3: sT20Mat = WALLMATE_Brick1; st = TWallData::kBrick; break; case 4: sT20Mat = WALLMATE_Rocket; st = TWallData::kRocket; break; case 5: sT20Mat = WALLMATE_Rocket1; st = TWallData::kRocket; break; case 6: sT20Mat = WALLMATE_Fill; st = TWallData::kFill; break; case 7: sT20Mat = WALLMATE_Fill1; st = TWallData::kFill1; break; case 8: sT20Mat = WALLMATE_Fill2; st = TWallData::kFill2; break; case 9: sT20Mat = WALLMATE_Divider; st = TWallData::kDivider; break; case 10: sT20Mat = WALLMATE_Curtain; st = TWallData::kCurtain; break; } pWall->SetStyle(st); pWall->SetT20WallMat(sT20Mat); TWallData::UsageFlag us = TWallData::kNormal; TDbWall::Catalog nCatalog = TDbWall::kInternal; switch(m_nUse) { case 0: us=TWallData::kNormal; nCatalog = TDbWall::kExternal; break; case 1: us=TWallData::kNormal; nCatalog = TDbWall::kInternal; break; case 2: us=TWallData::kNormal; nCatalog = TDbWall::kDispartOwner; break; case 3: us=TWallData::kVirtual; nCatalog = TDbWall::kVirtDispart; break; case 4: us=TWallData::kParapet; break; case 5: us=TWallData::kApartment; nCatalog = TDbWall::kToiletSlab; break; } pWall->SetUsageFlag(us); pWall->SetCatalog(nCatalog); } void CWallDlg::Obj2Dlg(const AcDbEntity *pObj) { TDbWall *pWall = TDbWall::cast(pObj); ASSERT(pObj); // sg modify 100906,暂时恢复左、右侧保温的控件名称 // sg modify 100714,左侧、右侧保温层的控件名称,根据内外墙变化 /* if (pWall->IsExternal()) // 如果是外墙,显示外侧、内侧 { if (pWall->IsExternal(OFFSET_RIGHT)) { m_csLeftCheckName = _T("内侧保温"); m_csRightCheckName = _T("外侧保温"); } else { m_csLeftCheckName = _T("外侧保温"); m_csRightCheckName = _T("内侧保温"); } } else // 如果是内墙,显示左侧、右侧 { m_csLeftCheckName = _T("左侧保温"); m_csRightCheckName = _T("右侧保温"); } */ m_csLeftCheckName = _T("左侧保温"); m_csRightCheckName = _T("右侧保温"); m_csWallElev = _T(""); m_nLeftWidth = 0; m_nRightWidth = 0; m_csWallHeight = _T(""); m_csRadius = _T(""); m_nStyle = 0; m_bpartEdit = false; m_bLeftInsulate = FALSE; m_bRightInsulate = FALSE; m_bStemInsulate = FALSE; m_dInsulateThick = 0.0; m_dInsulateThick2 = 0.0; m_pWall = pWall; m_csWallElev = (const TCHAR *)Dist2Str(pWall->GetElevation()); m_nLeftWidth = pWall->GetWidth(0); switch (pWall->GetStyle()) { case TWallData::kConcrete: { m_nStyle = 0; if (pWall->GetT20WallMat() == WALLMATE_Concrete1) { m_nStyle +=1; } break; } case TWallData::kBrick: { m_nStyle = 2; if (pWall->GetT20WallMat() == WALLMATE_Brick1) { m_nStyle += 1; } break; } case TWallData::kRocket: { m_nStyle = 4; if (pWall->GetT20WallMat() == WALLMATE_Rocket1) { m_nStyle += 1; } break; } case TWallData::kFill: { m_nStyle = 6; break; } case TWallData::kFill1: { m_nStyle = 7; break; } case TWallData::kFill2: { m_nStyle = 8; break; } case TWallData::kDivider: { m_nStyle = 9; break; } case TWallData::kCurtain: { m_nStyle = 10; break; } } m_nRightWidth = pWall->GetWidth(1); m_csWallHeight = (const TCHAR *)Dist2Str(pWall->GetHeight()); if (pWall->Is(CURVE_ARC)) m_csRadius = (const TCHAR *)Dist2Str(pWall->GetArc().GetRadius()); // 设置对话框里的用途选项 m_nUse = 0; switch (pWall->GetUsageFlag()) { case TWallData::kNormal: { if (pWall->GetCatalog() == TDbWall::kDispartOwner) { m_nUse = 2; } else if (pWall->GetCatalog() == TDbWall::kExternal) { m_nUse = 0; } else { m_nUse = 1; } break; } case TWallData::kVirtual: m_nUse = 3; break; case TWallData::kParapet: m_nUse = 4; break; case TWallData::kApartment: m_nUse = 5; break; } m_bLeftInsulate = pWall->IsInsulateOnSide(0); m_bRightInsulate = pWall->IsInsulateOnSide(1); m_dInsulateThick = pWall->GetInsulateThick(0); // sg add 100511,获取两侧保温层厚 m_dInsulateThick2 = pWall->GetInsulateThick(1); // sg add 100511,获取是否设置墙端头保温 m_bStemInsulate = pWall->HasInsulateEnd(); } HBRUSH CWallDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { HBRUSH hbr = CObjPreviewDlg::OnCtlColor(pDC, pWnd, nCtlColor); int nID=pWnd->GetDlgCtrlID(); if (nID==IDC_LEFT_TEXT) pDC->SetTextColor(acdbGetRGB(3)); else if (nID==IDC_RIGHT_TEXT) pDC->SetTextColor(acdbGetRGB(6)); return hbr; } void CWallDlg::OnSelchangeListData() { UpdateData(TRUE); int sel = m_listCtrl.GetCurSel(); if (sel==-1) return; m_nLeftWidth = m_lstMat[sel]->LeftWidth; m_nRightWidth = m_lstMat[sel]->RightWidth; UpdateData(FALSE); UpdateImage(); } void CWallDlg::OnButtonLeft() { UpdateData(TRUE); double nTmp = m_nLeftWidth + m_nRightWidth; m_nLeftWidth = nTmp; m_nRightWidth = 0; UpdateData(FALSE); UpdateImage(); } void CWallDlg::OnButtonMid() { UpdateData(TRUE); double nTmp = m_nLeftWidth + m_nRightWidth; m_nLeftWidth = nTmp/2; m_nRightWidth = nTmp/2; UpdateData(FALSE); UpdateImage(); } void CWallDlg::OnButtonRight() { UpdateData(TRUE); double nTmp = m_nLeftWidth + m_nRightWidth; m_nLeftWidth = 0; m_nRightWidth = nTmp; UpdateData(FALSE); UpdateImage(); } void CWallDlg::OnButtonChange() { UpdateData(TRUE); double nTmp = m_nLeftWidth; m_nLeftWidth = m_nRightWidth; m_nRightWidth = nTmp; UpdateData(FALSE); UpdateImage(); } void CWallDlg::OnSetFocusInsThick() { UpdateData(TRUE); } void CWallDlg::OnCheckLeftIns() { UpdateData(TRUE); UpdateImage(); } void CWallDlg::OnCheckRightIns() { UpdateData(TRUE); UpdateImage(); } // sg add 100511,增加墙端头保温 void CWallDlg::OnCheckStemIns() { UpdateImage(); } // 取左宽度 double CWallDlg::GetLeftWidth() { UpdateData(TRUE); return m_nLeftWidth; } // 取右宽度 double CWallDlg::GetRightWidth() { UpdateData(TRUE); return m_nRightWidth; } double CWallDlg::GetHeight() { UpdateData(TRUE); if (m_csWallHeight==_T("当前层高")) return DocGetLHeight(); else return _tstof(m_csWallHeight); } double CWallDlg::GetElev() { UpdateData(TRUE); return _tstof(m_csWallElev); } extern int CompareDouble(const selMaterial *s1,const selMaterial *s2); // 选择了另外一种材料 void CWallDlg::OnSelchangeMaterial() { UpdateData(TRUE); m_lstMat.Reset(); CString csStyle; // g_nSelStyle = m_material.GetCurSel(); // CWnd *pWnd = GetDlgItem(IDC_MATERIAL); // pWnd->GetWindowText(csStyle); // if (csStyle.Find(_T("填充墙"))!=-1) // csStyle=_T("填充墙"); //wlw t20一致 下面的材质要和DataStore.dbf文件一致 14.08.25 switch(m_nStyle) { case 0: case 1: csStyle = _T("钢筋混凝土"); break; case 2: case 3: csStyle = _T("砖墙"); break; case 4: case 5: csStyle = _T("砖墙"); break; case 6: case 7: case 8: csStyle = _T("填充墙"); break; case 9: csStyle = _T("轻质隔墙"); break; case 10: csStyle = _T("玻璃幕墙"); break; } CodeBase db; XString fullFile; if (!FindFile(_T("DataStore.dbf"), fullFile)) { MessageBox(_T("对不起,没有发现DataStore.dbf文件!")); return; } int Number; CString csType; double nLeft, nRight; XDbfTable *pTable = db.Open(fullFile); if (!pTable) { return; } pTable->MoveFirst(); while(!pTable->IsEOF()) { GET_FIELD(pTable, _T("TypeNumber"), Number); GET_FIELD(pTable, _T("TypeName"), csType); GET_FIELD(pTable, _T("TypeValue"), nLeft); GET_FIELD(pTable, _T("REMARK"), nRight); if (csType.Find(csStyle) > -1 && Number == 11){ selMaterial *pNew = new selMaterial(); pNew->LeftWidth = nLeft; pNew->RightWidth = nRight; m_lstMat.Append(pNew); /* if (csType.Find(_T("*")) > -1){ m_nLeftWidth = nLeft; m_nRightWidth = nRight; }*/ } pTable->MoveNext(); } int len = m_lstMat.Length(); m_lstMat.QuickSort(CompareDouble); m_listCtrl.ResetContent(); for(int i=0;iLeftWidth); csRight.Format(_T("%.0f"), m_lstMat[i]->RightWidth); int n = csLeft.GetLength(); xsTmp << (const TCHAR*)csLeft; for(int j=0;j<12-n;j++){ xsTmp << _T(" "); } xsTmp << (const TCHAR*)csRight; m_listCtrl.AddString((const TCHAR*)xsTmp); } UpdateData(FALSE); } BOOL CWallDlg::OnToolTipText(UINT, NMHDR* pNMHDR, LRESULT* pResult) { ASSERT(pNMHDR->code == TTN_NEEDTEXTA || pNMHDR->code == TTN_NEEDTEXTW); // if there is a top level routing frame then let it handle the message if (GetRoutingFrame() != NULL) return FALSE; // to be thorough we will need to handle UNICODE versions of the message also !! TOOLTIPTEXTA* pTTTA = (TOOLTIPTEXTA*)pNMHDR; TOOLTIPTEXTW* pTTTW = (TOOLTIPTEXTW*)pNMHDR; //TCHAR szFullText[512]; CString strTipText; // Zyu modify on 100723,消除64位编译警告 //UINT nID = pNMHDR->idFrom; UINT_PTR nID = pNMHDR->idFrom; if (pNMHDR->code == TTN_NEEDTEXTA && (pTTTA->uFlags & TTF_IDISHWND) || pNMHDR->code == TTN_NEEDTEXTW && (pTTTW->uFlags & TTF_IDISHWND)) { // idFrom is actually the HWND of the tool nID = ::GetDlgCtrlID((HWND)nID); if (nID!=IDC_LIST_DATA) return FALSE; } if (nID != 0) // will be zero on a separator { { CAcModuleResourceOverride vTmp; // Zyu modify on 100723,消除64位编译警告 //strTipText.LoadString(nID); //=szFullText; strTipText.LoadString((UINT)nID); //=szFullText; } #ifndef _UNICODE if (pNMHDR->code == TTN_NEEDTEXTA) { lstrcpyn(pTTTA->szText, strTipText, sizeof(pTTTA->szText)); } else { _mbstowcsz(pTTTW->szText, strTipText, sizeof(pTTTW->szText)); } #else if (pNMHDR->code == TTN_NEEDTEXTA) { _wcstombsz(pTTTA->szText, strTipText,sizeof(pTTTA->szText)); } else { lstrcpyn(pTTTW->szText, strTipText, sizeof(pTTTW->szText)); } #endif *pResult = 0; // bring the tooltip window above other popup windows ::SetWindowPos(pNMHDR->hwndFrom, HWND_TOP, 0, 0, 0, 0,SWP_NOACTIVATE| SWP_NOSIZE|SWP_NOMOVE|SWP_NOOWNERZORDER); return TRUE; } return TRUE; } //----------delete by fxj----------- // Add By LCF 2004/07/01 /*void CWallDlg::OnBnClickedCheckPartedit() { CDataExchange dx(this, true); DDX_Check(&dx, IDC_CHECK_PARTEDIT, m_bpartEdit); m_selectButton.EnableWindow(m_bpartEdit); } // Add By LCF 2004/07/01 void CWallDlg::OnBnClickedButtonSelect() { BeginEditorCommand(); XPoint ptStart, ptEnd; int nOldOsnap = g_nOsnapType; DocSetWallOsnapType(0); int nOsMode=0; xg_getvar(_T("OSMODE"), &nOsMode); nOsMode=0x0001|0x0002|0x0008|0x0020|0x0200; XPushVar osmode(_T("OSMODE"), nOsMode); // 临时显示基线 AcDbCurve *pCurve = m_pWall->AsAcDbCurve(); pCurve->setColorIndex(46); AcDbObjectId idCur; idCur = AddToModelSpace(pCurve, Adesk::kTrue); // 显示分段线 XScreenDc dc(1); XCurveSegment lCurve, rCurve; m_pWall->GetSideCurve(lCurve, rCurve); // 门窗 DList lstOpenings; m_pWall->GetOpenings(lstOpenings, 1); double nElev = m_pWall->GetElevation(); double dLeftWidth = fabs(m_pWall->GetWidth(0)); double dRightWidth = fabs(m_pWall->GetWidth(1)); double dOsnapWidth =dLeftWidth+dRightWidth; XPoint ptProject; // 选择起点 while(1) { if (acedGetPoint(NULL, _T("\n选择起点<退出>: "), ptStart) != RTNORM) { acdbOpenObject(pCurve, idCur, AcDb::kForWrite); pCurve->erase(Adesk::kTrue); pCurve->close(); DocSetWallOsnapType(nOldOsnap); CompleteEditorCommand(); return; } ptStart = Ucs2Wcs(ptStart); ptStart.z = nElev; if (m_pWall->ProjectToMe(ptStart, ptProject) != RTNORM) { acutPrintf(_T("\n选择点投影超出基线范围,请重新选择起点!")); continue; } // 判断点是否在基线延长线上 int ret = ptProject & (*m_pWall); if (ret != 1 && ret != 2 && ret != 3) { acutPrintf(_T("\n选择点投影超出基线范围,请重新选择起点!")); continue; } // 判断点是否在基线附近 if (ptStart.Distance2d(ptProject) > dOsnapWidth) { acutPrintf(_T("\n选择点距离基线太远,请重新选择起点!")); continue; } // 判断点是否在门窗处 int len = lstOpenings.Length(); if (len == 0) break; // 无门窗 for(long i=0; iGetOutlinePoly(nElev, poly); poly.Nth(1, seg); XPoint temPt; seg.ProjectToMe(ptProject, temPt); int iOpen = temPt & seg; if (iOpen == 3) { acutPrintf(_T("\n选择点不能投影在门窗处,请重新选择起点!")); break; } } if (i == len) break; // 选择点未落在门窗上 } ptStart = ptProject; XPoint ptStartTemp = Wcs2Ucs(ptStart); acutPrintf(_T("(%s,%s)"), Dist2Str(ptStartTemp.x), Dist2Str(ptStartTemp.y)); XPoint ptLStart, ptLEnd; lCurve.ProjectToMe(ptStart, ptLStart); rCurve.ProjectToMe(ptStart, ptLEnd); //ptLStart = Wcs2Ucs(ptLStart); //ptLEnd = Wcs2Ucs(ptLEnd); AcDbLine *plineL = new AcDbLine(ptLStart, ptLEnd); plineL->setColorIndex(1); AcDbObjectId idL; idL = AddToModelSpace(plineL, Adesk::kTrue); // 选择终点 while(1) { if (acedGetPoint(Wcs2Ucs(ptStart), _T("\n选择终点<退出>: "), ptEnd) != RTNORM) { acdbOpenObject(pCurve, idCur, AcDb::kForWrite); pCurve->erase(Adesk::kTrue); pCurve->close(); acdbOpenObject(plineL, idL, AcDb::kForWrite); plineL->erase(Adesk::kTrue); plineL->close(); DocSetWallOsnapType(nOldOsnap); CompleteEditorCommand(); return; } ptEnd = Ucs2Wcs(ptEnd); ptEnd.z = nElev; if (m_pWall->ProjectToMe(ptEnd, ptProject) != RTNORM) { acutPrintf(_T("\n选择点投影超出基线范围,请重新选择终点!")); continue; } // 判断与开始点距离 if (ptStart.Distance2d(ptProject) < 1.0E-6) { acutPrintf(_T("\n选择点与起点距离太小,请重新选择终点!")); continue; } // 判断点是否在基线延长线上 int ret = ptProject & (*m_pWall); if (ret != 1 && ret != 2 && ret != 3) { acutPrintf(_T("\n选择点投影超出基线范围,请重新选择终点!")); continue; } // 判断点是否在基线附近 if (ptEnd.Distance2d(ptProject) > dOsnapWidth) { acutPrintf(_T("\n选择点距离基线太远,请重新选择终点!")); continue; } // 判断点是否在门窗处 int len = lstOpenings.Length(); if (len == 0) break; // 无门窗 for(long i=0; iGetOutlinePoly(nElev, poly); poly.Nth(1, seg); XPoint temPt; seg.ProjectToMe(ptProject, temPt); int iOpen = temPt & seg; if (iOpen == 3) { acutPrintf(_T("\n选择点不能投影在门窗处,请重新选择终点!")); break; } } if (i == len) break; // 选择点未落在门窗上 } ptEnd = ptProject; XPoint ptEndTemp = Wcs2Ucs(ptEnd); acutPrintf(_T("(%s,%s)\n"), Dist2Str(ptEndTemp.x), Dist2Str(ptEndTemp.y)); XPoint ptRStart, ptREnd; lCurve.ProjectToMe(ptEnd, ptRStart); rCurve.ProjectToMe(ptEnd, ptREnd); //ptRStart = Wcs2Ucs(ptRStart); //ptREnd = Wcs2Ucs(ptREnd); AcDbLine *plineR = new AcDbLine(ptRStart, ptREnd); plineR->setColorIndex(1); AcDbObjectId idR; idR = AddToModelSpace(plineR, Adesk::kTrue); acedCommand(RTSTR, _T(""), RTSTR, _T(""), RTNONE); // 调整打断点顺序与墙体一致 XPoint startPoint = m_pWall->startPoint; double disStart = ptStart.Distance(startPoint); double disEnd = ptEnd.Distance(startPoint); if (disStart < disEnd) { m_ptStartBreak = ptStart; m_ptEndBreak = ptEnd; } else { m_ptStartBreak = ptEnd; m_ptEndBreak = ptStart; } acdbOpenObject(pCurve, idCur, AcDb::kForWrite); pCurve->erase(Adesk::kTrue); pCurve->close(); acdbOpenObject(plineL, idL, AcDb::kForWrite); plineL->erase(Adesk::kTrue); plineL->close(); acdbOpenObject(plineR, idR, AcDb::kForWrite); plineR->erase(Adesk::kTrue); plineR->close(); DocSetWallOsnapType(nOldOsnap); CompleteEditorCommand(); }*/ // [2010-3-25 wubo] C004-08 当墙体用途设为虚墙时,除用途外,所有控件都变灰。 void CWallDlg::OnCbnSelchangeComboUse() { UpdateData(TRUE); }