Files
envi-code/SourceCode/Code2026/tg_shs/shs_TwtKernal/InsBlockDlg.cpp
T
2026-09-28 15:28:50 +08:00

1000 lines
28 KiB
C++

// InsBlockDlg.cpp : implementation file
//
#include "stdafx.h"
//#include <cbclass.h>
#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.x<rect.BottomRight().x && point.y<rect.BottomRight().y && point.x >rect.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();
}