// InsBlockDlg.cpp : implementation file // #include "stdafx.h" //#include #include "InsBlockDlg.h" #include "BlockNum.h" #include "ZoomDlg.h" #include "SelectBlkDlg.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif //#ifdef _WIN64 #include"TGAs.h" //#endif BEGIN_MESSAGE_MAP(CValveTooBar, XToolBarCtrl) //{{AFX_MSG_MAP(CValveTooBar) ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTW, 0, 0xFFFF, OnToolTipText) ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTA, 0, 0xFFFF, OnToolTipText) //}}AFX_MSG_MAP END_MESSAGE_MAP() BOOL CValveTooBar::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; //消除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 != IDR_TOOLBAR_INSBLK && nID != IDR_TOOLBAR_SANITARY && nID != IDR_TOOLBAR_ATTACHMENT && nID != IDR_TOOLBAR_VALVE) { return FALSE; } } if (nID != 0) // will be zero on a separator { { CAcModuleResourceOverride vTmp; //消除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; } #define IDC_USER_COMBOX_TYPE 1089 static UINT indicators[] = {ID_SEPARATOR}; IMPLEMENT_DYNAMIC(CInsBlockDlg, CModelessDialog) CInsBlockDlg::CInsBlockDlg(const TCHAR* szTKName, int iOpenMode, CWnd* pParent /*=NULL*/) : CModelessDialog(CInsBlockDlg::IDD, pParent) { CString csTKName = szTKName; m_csTKName = csTKName; m_csTKAllName = csTKName + _T(".tk"); m_csCurBlkName = _T(""); m_csCurDwbName = _T(""); m_csCurRecord = _T(""); m_bNeedRotate = FALSE; m_bNeedFlange = FALSE; m_bIsPlan = TRUE; m_nIndex = 0; m_nPage = 0; m_nCurPos = 0; m_iRowNum = 4; m_iColNum = 6; // m_bInit = FALSE; m_bSuccess = TRUE; m_iMode = 0; if(iOpenMode == 0){ m_csPlanType = _T("平面阀门"); m_csSysType = _T("系统阀门"); } else if(iOpenMode == 1){ m_csPlanType = _T("平面附件"); m_csSysType = _T("系统附件"); } else if(iOpenMode == 3) m_csPlanType = _T("大小便器"); else if(iOpenMode == 4) m_csPlanType = _T("给水附件"); else if(iOpenMode == 5){ m_csPlanType = _T("平面仪表"); m_csSysType = _T("系统仪表"); } else if(iOpenMode == 6) m_csPlanType = _T("双线阀门"); } void CInsBlockDlg::DoDataExchange(CDataExchange* pDX) { CModelessDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CInsBlockDlg) DDX_Control(pDX, IDC_STATIC_SLIDE, m_staticSlide); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CInsBlockDlg, CModelessDialog) //{{AFX_MSG_MAP(CInsBlockDlg) ON_COMMAND(ID_BUTTON_PGUP, OnButtonPgup) ON_COMMAND(ID_BUTTON_PGDOWN, OnButtonPgdown) ON_COMMAND(ID_BUTTON_ROTATE, OnButtonRotate) ON_COMMAND(ID_BUTTON_FL_VALVE, OnButtonFlange) ON_COMMAND(ID_BUTTON_PLAN, OnButtonPlan) ON_COMMAND(ID_BUTTON_SYS, OnButtonSys) ON_COMMAND(ID_BUTTON_SAN1, OnButtonSan1) ON_COMMAND(ID_BUTTON_SAN2, OnButtonSan2) ON_COMMAND(ID_BUTTON_SAN3, OnButtonSan3) ON_COMMAND(ID_BUTTON_FEED, OnButtonFeed) ON_COMMAND(ID_BUTTON_DRAIN, OnButtonDrain) ON_COMMAND(ID_BUTTON_OTHER, OnButtonOther) ON_COMMAND(ID_BUTTON_FIRE, OnButtonFire) ON_COMMAND(ID_BUTTON_INSEQ, OnButtonIns) ON_COMMAND(ID_BUTTON_REPLACE_EQ, OnButtonReplace) ON_COMMAND(ID_BUTTON_INSVALVE, OnButtonIns) ON_COMMAND(ID_BUTTON_REPLACE_VALVE, OnButtonReplace) ON_COMMAND(ID_BUTTON_NEW_VALVE, OnButtonNew) ON_COMMAND(ID_BUTTON_NEW_ATTACH, OnButtonNew) ON_COMMAND(ID_BUTTON_NEW_BLK, OnButtonNew) ON_COMMAND(ID_BUTTON_BLKMAN, OnButtonBlkMan) ON_COMMAND(ID_BUTTON_SETTING, OnButtonSetting) ON_COMMAND(ID_BLK_EXCHANGE, OnExchange) ON_COMMAND(ID_BLK_LAYOUT1X1, OnLayout11) ON_COMMAND(ID_BLK_LAYOUT2X2, OnLayout22) ON_COMMAND(ID_BLK_LAYOUT3X3, OnLayout33) ON_COMMAND(ID_BLK_LAYOUT4X4, OnLayout44) ON_COMMAND(ID_BLK_LAYOUT4X6, OnLayout46) ON_COMMAND(ID_BLK_LAYOUT, OnLayout) ON_COMMAND(ID_BUTTON_ZOOM, OnButtonZoom) ON_WM_CLOSE() ON_WM_SIZE() ON_WM_LBUTTONUP() ON_WM_MOUSEMOVE() ON_WM_PAINT() ON_WM_CONTEXTMENU() ON_CBN_SELCHANGE(IDC_USER_COMBOX_TYPE, OnSelchangeComboType) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CInsBlockDlg message handlers BOOL CInsBlockDlg::OnInitDialog() { CModelessDialog::OnInitDialog(); CTemporaryResourceOverride vTmp; if(m_csTKName == _T("VALVE") && m_csPlanType != _T("双线阀门")){ int ButtonID[]={ID_BUTTON_PGUP, ID_BUTTON_PGDOWN, 0, ID_BUTTON_INSVALVE, ID_BUTTON_REPLACE_VALVE, ID_BUTTON_NEW_VALVE, 0, ID_BUTTON_PLAN, ID_BUTTON_SYS, 0,}; // ID_BUTTON_ROTATE, ID_BUTTON_ZOOM,ID_BUTTON_BLKMAN,}; m_ToolBar.InitToolBar(ButtonID, 10, IDR_TOOLBAR_INSBLK, this); m_ToolBar.SetStyle(ID_BUTTON_INSVALVE, TBSTYLE_CHECKGROUP); m_ToolBar.SetStyle(ID_BUTTON_REPLACE_VALVE, TBSTYLE_CHECKGROUP); m_ToolBar.SetStyle(ID_BUTTON_NEW_VALVE, TBSTYLE_CHECKGROUP); m_ToolBar.SetStyle(ID_BUTTON_PLAN, TBSTYLE_CHECKGROUP); m_ToolBar.SetStyle(ID_BUTTON_SYS, TBSTYLE_CHECKGROUP); //m_ToolBar.SetStyle(ID_BUTTON_ROTATE, TBSTYLE_CHECK); m_ToolBar.CheckButton(ID_BUTTON_INSVALVE, 1); m_com.Create(WS_CHILD|WS_VISIBLE|WS_VSCROLL|CBS_DROPDOWNLIST |CBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP, CRect(190,0,260,250), &m_ToolBar, IDC_USER_COMBOX_TYPE); m_com.AddString(_T("阀门")); m_com.AddString(_T("附件")); m_com.AddString(_T("仪表")); if(m_csPlanType == _T("平面阀门")) m_com.SetCurSel(0); else if(m_csPlanType == _T("平面附件")) m_com.SetCurSel(1); else if(m_csPlanType == _T("平面仪表")) m_com.SetCurSel(2); } else if(m_csTKName == _T("Sanitary")){ int ButtonID[]={ID_BUTTON_PGUP, ID_BUTTON_PGDOWN, 0, ID_BUTTON_SAN1, ID_BUTTON_SAN2, ID_BUTTON_SAN3, 0, ID_BUTTON_NEW_BLK, ID_BUTTON_ZOOM,ID_BUTTON_BLKMAN,}; m_ToolBar.InitToolBar(ButtonID, 10, IDR_TOOLBAR_SANITARY, this); m_ToolBar.SetStyle(ID_BUTTON_SAN1, TBSTYLE_CHECKGROUP); m_ToolBar.SetStyle(ID_BUTTON_SAN2, TBSTYLE_CHECKGROUP); m_ToolBar.SetStyle(ID_BUTTON_SAN3, TBSTYLE_CHECKGROUP); m_ToolBar.CheckButton(ID_BUTTON_SAN1, 1); } else if(m_csTKName == _T("ATTACHMENT")){ int ButtonID[]={ID_BUTTON_PGUP, ID_BUTTON_PGDOWN, 0, ID_BUTTON_INSEQ, ID_BUTTON_REPLACE_EQ, ID_BUTTON_NEW_ATTACH, 0, ID_BUTTON_ZOOM,ID_BUTTON_BLKMAN,}; m_ToolBar.InitToolBar(ButtonID, 9, IDR_TOOLBAR_ATTACHMENT, this); // m_ToolBar.SetStyle(ID_BUTTON_FEED, TBSTYLE_CHECKGROUP); // m_ToolBar.SetStyle(ID_BUTTON_DRAIN, TBSTYLE_CHECKGROUP); // m_ToolBar.SetStyle(ID_BUTTON_FIRE, TBSTYLE_CHECKGROUP); // m_ToolBar.SetStyle(ID_BUTTON_OTHER, TBSTYLE_CHECKGROUP); // m_ToolBar.CheckButton(ID_BUTTON_FEED, 1); m_com.Create(WS_CHILD|WS_VISIBLE|WS_VSCROLL|CBS_DROPDOWNLIST |CBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP, CRect(175,0,265,250), &m_ToolBar, IDC_USER_COMBOX_TYPE); m_com.AddString(_T("给水附件")); m_com.AddString(_T("排水附件")); m_com.AddString(_T("消防附件")); m_com.AddString(_T("其它设备")); m_com.AddString(_T("水处理设备")); m_com.AddString(_T("水处理构筑物")); m_ToolBar.SetStyle(ID_BUTTON_INSEQ, TBSTYLE_CHECKGROUP); m_ToolBar.SetStyle(ID_BUTTON_REPLACE_EQ, TBSTYLE_CHECKGROUP); m_ToolBar.SetStyle(ID_BUTTON_NEW_VALVE, TBSTYLE_CHECKGROUP); m_ToolBar.CheckButton(ID_BUTTON_INSEQ, 1); } else if(m_csTKName == _T("VALVE") && m_csPlanType == _T("双线阀门")){ int ButtonID[]={ID_BUTTON_PGUP, ID_BUTTON_PGDOWN, 0, ID_BUTTON_FL_VALVE,ID_BUTTON_NEW_VALVE, ID_BUTTON_ZOOM,ID_BUTTON_BLKMAN,ID_BUTTON_SETTING}; m_ToolBar.InitToolBar(ButtonID, 8, IDR_TOOLBAR_VALVE, this); m_ToolBar.SetStyle(ID_BUTTON_FL_VALVE, TBSTYLE_CHECK); } UpdateDlgData(TRUE); if(m_bNeedRotate) m_ToolBar.CheckButton(ID_BUTTON_ROTATE, 1); if(m_csTKName == _T("Sanitary")){ if(m_csCurType == _T("大小便器")) m_ToolBar.CheckButton(ID_BUTTON_SAN1, 1); else if(m_csCurType == _T("洗脸盆")) m_ToolBar.CheckButton(ID_BUTTON_SAN2, 1); else if(m_csCurType == _T("浴缸")) m_ToolBar.CheckButton(ID_BUTTON_SAN3, 1); } else if(m_csTKName == _T("VALVE") && m_csPlanType != _T("双线阀门")){ if(m_bIsPlan) m_ToolBar.CheckButton(ID_BUTTON_PLAN, 1); else m_ToolBar.CheckButton(ID_BUTTON_SYS, 1); } else if(m_csTKName == _T("ATTACHMENT")){ if(m_csCurType == _T("给水附件")) m_com.SetCurSel(0); else if(m_csCurType == _T("排水附件")) m_com.SetCurSel(1); else if(m_csCurType == _T("消防附件")) m_com.SetCurSel(2); else if(m_csCurType == _T("其它设备")) m_com.SetCurSel(3); else if(m_csCurType == _T("水处理设备")) m_com.SetCurSel(4); else if(m_csCurType == _T("水处理构筑物")) m_com.SetCurSel(5); // if(m_csCurType == _T("给水附件")) // m_ToolBar.CheckButton(ID_BUTTON_FEED, 1); // else if(m_csCurType == _T("排水附件")) // m_ToolBar.CheckButton(ID_BUTTON_DRAIN, 1); // else if(m_csCurType == _T("消防附件")) // m_ToolBar.CheckButton(ID_BUTTON_FIRE, 1); // else if(m_csCurType == _T("其它设备")) // m_ToolBar.CheckButton(ID_BUTTON_OTHER, 1); } m_Status.CreateEx(this,0,WS_CHILD | WS_VISIBLE | CBRS_BOTTOM); m_Status.SetIndicators(indicators,1); m_Status.ShowWindow(SW_SHOW); RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, 0); LoadCurBlk(); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void CInsBlockDlg::OnClose() { CModelessDialog::OnClose(); acedPostCommand(_T("\33\33")); } void CInsBlockDlg::PostNcDestroy() { UpdateDlgData(FALSE); CModelessDialog::PostNcDestroy(); } void CInsBlockDlg::OnSize(UINT nType, int cx, int cy) { CModelessDialog::OnSize(nType, cx, cy); CWnd *pWnd = GetDlgItem(IDC_STATIC_SLIDE); if(pWnd == NULL || !IsWindow(pWnd->m_hWnd)) return; CRect rc; GetClientRect(&rc); rc.DeflateRect(6, 28); pWnd->MoveWindow(rc); RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, 0); } void CInsBlockDlg::OnLButtonUp(UINT nFlags, CPoint point) { if(point.x == -1 && point.y == -1){ //鼠标拖拽 m_nIndex = m_staticSlide.m_iIndex; m_nPage = m_staticSlide.m_iPage; m_nCurPos = m_staticSlide.m_iCurPos; LoadCurBlk(); acedGetAcadDwgView()->SetFocus(); } CModelessDialog::OnLButtonUp(nFlags, point); } void CInsBlockDlg::OnMouseMove(UINT nFlags, CPoint point) { XString xsTKName, xsRocord; SplitSlbName(m_staticSlide.m_csMoveRecord, xsTKName, xsRocord); TCHAR szDrive[_MAX_DRIVE]=_T(""), szDir[_MAX_DIR]=_T(""), szFile[_MAX_FNAME]=_T(""), szExt[_MAX_EXT]=_T(""); _tsplitpath(xsTKName, szDrive, szDir, szFile, szExt); xsTKName = szFile; CString csSysOrUser = szDir; if(csSysOrUser.Find(_T("DWBUSER")) > -1 || csSysOrUser.Find(_T("dwbuser")) > -1) csSysOrUser = _T("用户库"); else csSysOrUser = _T("系统库"); CString csPrompt; csPrompt.Format(_T("%s (%s%s %s)"), m_staticSlide.m_csMoveDesName, csSysOrUser, xsTKName, xsRocord); m_Status.SetPaneText(0, csPrompt); m_Status.UpdateWindow(); CModelessDialog::OnMouseMove(nFlags, point); } void CInsBlockDlg::OnPaint() { CPaintDC dc(this); // device context for painting } void CInsBlockDlg::OnContextMenu(CWnd* pWnd, CPoint point) { CMenu menu; menu.LoadMenu(IDR_INSBLK_MENU); if(IsInRect(IDC_STATIC_SLIDE, point)) { CMenu *pSubMenu = menu.GetSubMenu(0); if(pSubMenu){ if(m_nPage == 0) pSubMenu->EnableMenuItem(ID_BUTTON_PGUP, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED); else if(m_staticSlide.TotalPages() == (m_nPage + 1)) pSubMenu->EnableMenuItem(ID_BUTTON_PGDOWN, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED); pSubMenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, this, NULL); } } } BOOL CInsBlockDlg::IsInRect(UINT CtrlID, CPoint point) { CRect rect; CWnd *pWnd=GetDlgItem(CtrlID); ASSERT(pWnd); pWnd->GetWindowRect(rect); if(point.xrect.TopLeft().x && point.y >rect.TopLeft().y) return TRUE; return FALSE; } ////////////////////////////////////////// menu command /////////////////////////////////////////// //向后翻页 void CInsBlockDlg::OnButtonPgup() { m_staticSlide.OnPgup(); m_nPage = m_staticSlide.m_iPage; if(m_nPage == 0) m_ToolBar.EnableButton(ID_BUTTON_PGUP, FALSE); else m_ToolBar.EnableButton(ID_BUTTON_PGUP, TRUE); if(m_staticSlide.TotalPages() == (m_nPage + 1)) m_ToolBar.EnableButton(ID_BUTTON_PGDOWN, FALSE); else m_ToolBar.EnableButton(ID_BUTTON_PGDOWN, TRUE); LoadCurBlk(); UpdateWindow(); } //向前翻页 void CInsBlockDlg::OnButtonPgdown() { m_staticSlide.OnPgdown(); m_nPage = m_staticSlide.m_iPage; if(m_nPage == 0) m_ToolBar.EnableButton(ID_BUTTON_PGUP, FALSE); else m_ToolBar.EnableButton(ID_BUTTON_PGUP, TRUE); if(m_staticSlide.TotalPages() == (m_nPage + 1)) m_ToolBar.EnableButton(ID_BUTTON_PGDOWN, FALSE); else m_ToolBar.EnableButton(ID_BUTTON_PGDOWN, TRUE); LoadCurBlk(); UpdateWindow(); } void CInsBlockDlg::OnButtonPlan() { if(m_bIsPlan) return; m_csCurType = m_csPlanType; m_bIsPlan = TRUE; m_staticSlide.ResetSource(m_csTKName, m_csPlanType, 0, 0, 0); m_nPage = m_staticSlide.m_iPage; m_ToolBar.EnableButton(ID_BUTTON_PGUP, FALSE); if(m_staticSlide.TotalPages() == (m_nPage + 1)) m_ToolBar.EnableButton(ID_BUTTON_PGDOWN, FALSE); else m_ToolBar.EnableButton(ID_BUTTON_PGDOWN, TRUE); LoadCurBlk(); acedGetAcadDwgView()->SetFocus(); PostCommand(_T("R "), false); } void CInsBlockDlg::OnButtonSys() { if(!m_bIsPlan) return; m_bIsPlan = FALSE; m_csCurType = m_csSysType; m_staticSlide.ResetSource(m_csTKName, m_csSysType, 0, 0, 0); m_nPage = m_staticSlide.m_iPage; m_ToolBar.EnableButton(ID_BUTTON_PGUP, FALSE); if(m_staticSlide.TotalPages() == (m_nPage + 1)) m_ToolBar.EnableButton(ID_BUTTON_PGDOWN, FALSE); else m_ToolBar.EnableButton(ID_BUTTON_PGDOWN, TRUE); LoadCurBlk(); acedGetAcadDwgView()->SetFocus(); PostCommand(_T("R "), false); } void CInsBlockDlg::OnButtonSan1() { m_csCurType = _T("大小便器"); m_staticSlide.ResetSource(m_csTKName, _T("大小便器"), 0, 0, 0); m_ToolBar.EnableButton(ID_BUTTON_PGUP, FALSE); if(m_staticSlide.TotalPages() == (m_nPage + 1)) m_ToolBar.EnableButton(ID_BUTTON_PGDOWN, FALSE); else m_ToolBar.EnableButton(ID_BUTTON_PGDOWN, TRUE); LoadCurBlk(); acedGetAcadDwgView()->SetFocus(); PostCommand(_T("W "), false); } void CInsBlockDlg::OnButtonSan2() { m_csCurType = _T("洗脸盆"); m_staticSlide.ResetSource(m_csTKName, _T("洗脸盆"), 0, 0, 0); m_ToolBar.EnableButton(ID_BUTTON_PGUP, FALSE); if(m_staticSlide.TotalPages() == (m_nPage + 1)) m_ToolBar.EnableButton(ID_BUTTON_PGDOWN, FALSE); else m_ToolBar.EnableButton(ID_BUTTON_PGDOWN, TRUE); acedGetAcadDwgView()->SetFocus(); PostCommand(_T("W "), false); LoadCurBlk(); } void CInsBlockDlg::OnButtonSan3() { m_csCurType = _T("浴缸"); m_staticSlide.ResetSource(m_csTKName, _T("浴缸"), 0, 0, 0); m_ToolBar.EnableButton(ID_BUTTON_PGUP, FALSE); if(m_staticSlide.TotalPages() == (m_nPage + 1)) m_ToolBar.EnableButton(ID_BUTTON_PGDOWN, FALSE); else m_ToolBar.EnableButton(ID_BUTTON_PGDOWN, TRUE); LoadCurBlk(); acedGetAcadDwgView()->SetFocus(); PostCommand(_T("W "), false); } void CInsBlockDlg::OnButtonFeed() { m_csCurType = _T("给水附件"); m_staticSlide.ResetSource(m_csTKName, _T("给水附件"), 0, 0, 0); m_ToolBar.EnableButton(ID_BUTTON_PGUP, FALSE); if(m_staticSlide.TotalPages() == (m_nPage + 1)) m_ToolBar.EnableButton(ID_BUTTON_PGDOWN, FALSE); else m_ToolBar.EnableButton(ID_BUTTON_PGDOWN, TRUE); LoadCurBlk(); acedGetAcadDwgView()->SetFocus(); PostCommand(_T("R "), false); } void CInsBlockDlg::OnButtonDrain() { m_csCurType = _T("排水附件"); m_staticSlide.ResetSource(m_csTKName, _T("排水附件"), 0, 0, 0); m_ToolBar.EnableButton(ID_BUTTON_PGUP, FALSE); if(m_staticSlide.TotalPages() == (m_nPage + 1)) m_ToolBar.EnableButton(ID_BUTTON_PGDOWN, FALSE); else m_ToolBar.EnableButton(ID_BUTTON_PGDOWN, TRUE); LoadCurBlk(); acedGetAcadDwgView()->SetFocus(); PostCommand(_T("R "), false); } void CInsBlockDlg::OnButtonOther() { m_csCurType = _T("其它设备"); m_staticSlide.ResetSource(m_csTKName, _T("其它设备"), 0, 0, 0); m_ToolBar.EnableButton(ID_BUTTON_PGUP, FALSE); if(m_staticSlide.TotalPages() == (m_nPage + 1)) m_ToolBar.EnableButton(ID_BUTTON_PGDOWN, FALSE); else m_ToolBar.EnableButton(ID_BUTTON_PGDOWN, TRUE); LoadCurBlk(); acedGetAcadDwgView()->SetFocus(); PostCommand(_T("R "), false); } void CInsBlockDlg::OnButtonFire() { m_csCurType = _T("消防附件"); m_staticSlide.ResetSource(m_csTKName, _T("消防附件"), 0, 0, 0); m_ToolBar.EnableButton(ID_BUTTON_PGUP, FALSE); if(m_staticSlide.TotalPages() == (m_nPage + 1)) m_ToolBar.EnableButton(ID_BUTTON_PGDOWN, FALSE); else m_ToolBar.EnableButton(ID_BUTTON_PGDOWN, TRUE); LoadCurBlk(); acedGetAcadDwgView()->SetFocus(); PostCommand(_T("R "), false); } void CInsBlockDlg::Reset() { //int page = m_staticSlide.TotalPages() - 1; int page = 0; if(m_csTKName == _T("VALVE")) m_ToolBar.CheckButton(ID_BUTTON_INSVALVE, 1); else if(m_csTKName == _T("ATTACHMENT")) m_ToolBar.CheckButton(ID_BUTTON_INSEQ, 1); m_staticSlide.ResetSource(m_csTKName, m_csCurType, 0, page, 0); if(page == 0) m_ToolBar.EnableButton(ID_BUTTON_PGUP, FALSE); if(m_staticSlide.TotalPages() == (m_nPage + 1)) m_ToolBar.EnableButton(ID_BUTTON_PGDOWN, FALSE); else m_ToolBar.EnableButton(ID_BUTTON_PGDOWN, TRUE); LoadCurBlk(); } void CInsBlockDlg::OnButtonIns() { if(m_iMode == 0) return; m_iMode = 0; acedGetAcadDwgView()->SetFocus(); PostCommand(_T("R "), false); } void CInsBlockDlg::OnButtonReplace() { if(m_iMode == 1) return; m_iMode = 1; acedGetAcadDwgView()->SetFocus(); PostCommand(_T("R "), false); } void CInsBlockDlg::OnButtonNew() { if(m_iMode == 2) return; m_iMode = 2; acedGetAcadDwgView()->SetFocus(); PostCommand(_T("R "), false); } void CInsBlockDlg::OnButtonSetting() { CModelessDialog::OnClose(); acedPostCommand(_T("\33\33")); acedPostCommand(_T("fmgg ")); } void CInsBlockDlg::OnButtonBlkMan() { XString sLibFile, xsTmp; CString csTKW; if(m_csTKName == _T("Sanitary")) csTKW = _T("洁具库.TKW"); else if(m_csTKName == _T("ATTACHMENT")) csTKW = _T("附件库.TKW"); else if(m_csTKName == _T("VALVE")) csTKW = _T("阀门库.TKW"); sLibFile << g_sDwbPath << csTKW; xsTmp = m_staticSlide.m_csCurRecord; InvokeTkwMan(sLibFile, FALSE, xsTmp); Reset(); } void CInsBlockDlg::OnButtonRotate() { m_bNeedRotate = !m_bNeedRotate; } void CInsBlockDlg::OnButtonFlange() { m_bNeedFlange = !m_bNeedFlange; } void CInsBlockDlg::OnLayout11() { m_iRowNum = 1; m_iColNum = 1; m_nPage = 0; m_nCurPos = 0; m_staticSlide.m_iRowNum = 1; m_staticSlide.m_iColNum = 1; m_staticSlide.m_iPage = 0; m_staticSlide.m_iCurPos = 0; Invalidate(TRUE); UpdateWindow(); } void CInsBlockDlg::OnLayout22() { m_iRowNum = 2; m_iColNum = 2; m_nPage = 0; m_nCurPos = 0; m_staticSlide.m_iRowNum = 2; m_staticSlide.m_iColNum = 2; m_staticSlide.m_iPage = 0; m_staticSlide.m_iCurPos = 0; Invalidate(TRUE); UpdateWindow(); } void CInsBlockDlg::OnLayout33() { m_iRowNum = 3; m_iColNum = 3; m_nPage = 0; m_nCurPos = 0; m_staticSlide.m_iRowNum = 3; m_staticSlide.m_iColNum = 3; m_staticSlide.m_iPage = 0; m_staticSlide.m_iCurPos = 0; Invalidate(TRUE); UpdateWindow(); } void CInsBlockDlg::OnLayout44() { m_iRowNum = 4; m_iColNum = 4; m_nPage = 0; m_nCurPos = 0; m_staticSlide.m_iRowNum = 4; m_staticSlide.m_iColNum = 4; m_staticSlide.m_iPage = 0; m_staticSlide.m_iCurPos = 0; Invalidate(TRUE); UpdateWindow(); } void CInsBlockDlg::OnLayout46() { m_iRowNum = 4; m_iColNum = 6; m_nPage = 0; m_nCurPos = 0; m_staticSlide.m_iRowNum = 4; m_staticSlide.m_iColNum = 6; m_staticSlide.m_iPage = 0; m_staticSlide.m_iCurPos = 0; Invalidate(TRUE); UpdateWindow(); } void CInsBlockDlg::OnLayout() { CBlockNum diaBlkNum(m_iRowNum, m_iColNum); if(diaBlkNum.DoModal() == IDOK){ m_iRowNum = diaBlkNum.m_iRow; m_iColNum = diaBlkNum.m_iCol; m_nPage = 0; m_nCurPos = 0; m_staticSlide.m_iRowNum = m_iRowNum; m_staticSlide.m_iColNum = m_iColNum; m_staticSlide.m_iPage = 0; m_staticSlide.m_iCurPos = 0; Invalidate(TRUE); UpdateWindow(); } } void CInsBlockDlg::OnButtonZoom() { if(m_staticSlide.m_csCurRecord == _T("")) return; CTemporaryResourceOverride thisResource; CZoomDlg zDlg; zDlg.m_strPathSlideName = m_staticSlide.m_csCurRecord; zDlg.m_strDiscript = m_staticSlide.m_csCurDesName; INT_PTR iTemp=zDlg.DoModal(); if(iTemp == -1 || iTemp == IDABORT) return; } void CInsBlockDlg::OnExchange() { CTemporaryResourceOverride vTemp; CSelectBlkDlg dlg; dlg.m_staticSlide.m_bOnlyCurType = TRUE; dlg.m_staticSlide.m_iRowNum = 4; dlg.m_staticSlide.m_iColNum = 4; dlg.m_staticSlide.m_csCurRecord = m_staticSlide.m_csCurRecord; dlg.m_csTkName = m_csTKName; dlg.m_csType = m_csCurType; CRect rect = m_staticSlide.m_rectSel; m_staticSlide.ClientToScreen(rect); dlg.m_ptBase = rect.BottomRight(); if(dlg.DoModal() == IDOK){ //CString csTkName2 = m_staticSlide.m_csTKAllName; cet 2012.4.18 del XString xsTKName1, xsTKName2, xsRocord1, xsRocord2, xsItem1, xsItem2; SplitSlbName(m_staticSlide.m_csCurRecord, xsTKName1, xsRocord1); SplitSlbName(dlg.m_staticSlide.m_csCurRecord, xsTKName2, xsRocord2); //xsItem1 = (const TCHAR*)GetBlkDesName((const TCHAR*)xsRocord1, csTkName); cet 2012.4.18 del //xsItem2 = (const TCHAR*)GetBlkDesName((const TCHAR*)xsRocord2, csTkName); cet 2012.4.18 del if(xsRocord1 == xsRocord2) return; // cet 2012.4.18 add if (xsTKName1 != xsTKName2) { MessageBox(_T("不同类型无法进行位置交换!"), _T("警告"), MB_OK); return; } if(MessageBox(_T("您是否真的确定要与该图块交换位置?"),_T("提醒"),MB_OKCANCEL|MB_ICONQUESTION) != IDOK) return; // cet 2012.4.18 add CString csTkName, csTemp = xsTKName1.cs(), csTemp2 = m_staticSlide.m_csTKAllName; int nIndex = csTemp.ReverseFind(_T('\\')); int nIndex2 = csTemp2.ReverseFind(_T('\\')); if (nIndex == -1 || nIndex2 == -1) { return; } csTkName = csTemp2.Left(nIndex2 + 1) + csTemp.Right(csTemp.GetLength() - nIndex - 1); csTkName += _T(".tk"); xsItem1 = (const TCHAR*)GetBlkDesName((const TCHAR*)xsRocord1, csTkName); xsItem2 = (const TCHAR*)GetBlkDesName((const TCHAR*)xsRocord2, csTkName); int flag(0); { CodeBase db; XDbfTable *pTable = db.Open(csTkName); if(!pTable) return; CString csItem, csDrawing; for(pTable->MoveFirst();!pTable->IsEOF();pTable->MoveNext()){ GET_FIELD(pTable, _T("item"), csItem); GET_FIELD(pTable, _T("Drawing"), csDrawing); if(csDrawing == xsRocord1){ SET_FIELD(pTable, _T("Drawing"), xsRocord2); SET_FIELD(pTable, _T("item"), xsItem2); flag++; } if(csDrawing == xsRocord2){ SET_FIELD(pTable, _T("Drawing"), xsRocord1); SET_FIELD(pTable, _T("item"), xsItem1); flag++; } if(flag == 2) break; } }//CodeBase 结束 if(flag == 2){ m_staticSlide.ResetSource(m_csTKName, m_csCurType, m_staticSlide.m_iIndex, m_staticSlide.m_iPage, m_staticSlide.m_iCurPos); LoadCurBlk(); acedGetAcadDwgView()->SetFocus(); } } } ////////////////////////////////////////// function /////////////////////////////////////////// void CInsBlockDlg::UpdateDlgData(BOOL bIsRead) { CString csRegTmp; if(m_csTKName == _T("Sanitary")) csRegTmp = _T("Sanitary"); else if(m_csTKName == _T("ATTACHMENT")) csRegTmp = _T("Attachment"); else if(m_csTKName == _T("VALVE")){ if(m_csPlanType == _T("平面阀门")) csRegTmp = _T("DlgValveInfo"); else if(m_csPlanType == _T("平面附件")) csRegTmp = _T("DlgAttachInfo"); else if(m_csPlanType == _T("双线阀门")) csRegTmp = _T("DlgValveDouble"); } CRegProperty regProp(GetRegLocation(), csRegTmp); regProp.SetTopRootKey(HKEY_CURRENT_USER); if(bIsRead){ m_csCurType = m_csPlanType; if(_tcsicmp(m_csTKName, _T("TWTSYS")) != 0){ regProp.GetValue(_T("RowNum"), m_iRowNum); regProp.GetValue(_T("ColNum"), m_iColNum); regProp.GetValue(_T("curPos"), m_nCurPos); regProp.GetValue(_T("index"), m_nIndex); regProp.GetValue(_T("type"), m_csCurType); regProp.GetValue(_T("page"), m_nPage); regProp.GetValue(_T("IsPlanLib"), m_bIsPlan); } m_staticSlide.m_iColNum = m_iColNum; m_staticSlide.m_iRowNum = m_iRowNum; m_staticSlide.m_iIndex = m_nIndex; m_staticSlide.m_iPage = m_nPage; m_staticSlide.m_iCurPos = m_nCurPos; m_staticSlide.ResetSource(m_csTKName, m_csCurType, m_nIndex, m_nPage, m_nCurPos); if(m_nPage == 0) m_ToolBar.EnableButton(ID_BUTTON_PGUP, FALSE); else m_ToolBar.EnableButton(ID_BUTTON_PGUP, TRUE); if(m_staticSlide.TotalPages() == (m_nPage + 1)) m_ToolBar.EnableButton(ID_BUTTON_PGDOWN, FALSE); else m_ToolBar.EnableButton(ID_BUTTON_PGDOWN, TRUE); if(m_csTKName == _T("VALVE") && m_csPlanType != _T("双线阀门")){ if(m_bIsPlan) m_ToolBar.CheckButton(ID_BUTTON_PLAN, 1); else m_ToolBar.CheckButton(ID_BUTTON_SYS, 1); } } else if(_tcsicmp(m_csTKName, _T("TWTSYS")) != 0){ if(!m_bSuccess){ m_iRowNum = 4; m_iColNum = 6; m_nCurPos = 0; m_nIndex = 0; m_nPage = 0; } regProp.SetValue(_T("RowNum"), m_iRowNum); regProp.SetValue(_T("ColNum"), m_iColNum); regProp.SetValue(_T("curPos"), m_nCurPos); regProp.SetValue(_T("index"), m_nIndex); regProp.SetValue(_T("page"), m_nPage); regProp.SetValue(_T("IsPlanLib"), m_bIsPlan); regProp.SetValue(_T("type"), m_csCurType); } } BOOL CInsBlockDlg::LoadCurBlk() { // AcDbDatabase *dwg=acdbCurDwg(); //沈睿 removed 2006-1-16 对象的方法好像有些问题 // AcAxDocLock docLock(dwg); // VERIFY(docLock.lockStatus() == Acad::eOk); XString xsBlkName; acDocManager->lockDocument(curDoc(),AcAp::kWrite,NULL,NULL,true); if(LoadDwbBlock(m_staticSlide.m_csCurRecord, xsBlkName) != RTNORM) { acDocManager->unlockDocument(curDoc()); MessageBox(_T("加载图块失败!")); m_bSuccess = FALSE; return FALSE; } acDocManager->unlockDocument(curDoc()); m_csCurBlkName = (const TCHAR*)xsBlkName; g_csInsBlkName = m_csCurBlkName; return TRUE; } void CInsBlockDlg::OnSelchangeComboType() { UpdateDlgData(FALSE); CString csSel; int iSel = m_com.GetCurSel(); CString csType; m_com.GetLBText(iSel, csType); if(m_csTKName == _T("VALVE") && m_csPlanType != _T("双线阀门")){ if(csType == _T("阀门")){ m_csPlanType = _T("平面阀门"); m_csSysType = _T("系统阀门"); } else if(csType == _T("仪表")){ m_csPlanType = _T("平面仪表"); m_csSysType = _T("系统仪表"); } else if(csType == _T("附件")){ m_csPlanType = _T("平面附件"); m_csSysType = _T("系统附件"); } } else if(m_csTKName == _T("ATTACHMENT")) { if(csType == _T("给水附件")) m_csCurType = _T("给水附件"); else if(csType == _T("排水附件")) m_csCurType = _T("排水附件"); else if(csType == _T("消防附件")) m_csCurType = _T("消防附件"); else if(csType == _T("其它设备")) m_csCurType = _T("其它设备"); else if(csType == _T("水处理设备")) m_csCurType = _T("水处理设备"); else if(csType == _T("水处理构筑物")) m_csCurType = _T("水处理构筑物"); CRegProperty regProp(GetRegLocation(), _T("Attachment")); regProp.SetTopRootKey(HKEY_CURRENT_USER); regProp.SetValue(_T("type"), m_csCurType); } UpdateDlgData(TRUE); LoadCurBlk(); }