2834 lines
72 KiB
C++
2834 lines
72 KiB
C++
// GJKWorkspace.cpp : implementation file
|
|
//
|
|
|
|
#include "stdafx.h"
|
|
|
|
#include "GJKWorkspace.h"
|
|
#include "GJKReplaceOption.h"
|
|
#include "TKWorkspace.h"
|
|
#include "Progresswnd.h"
|
|
#include "Ayrdlg.h"
|
|
#include "TkwFile.h"
|
|
#include "XFilePathName.h"
|
|
#include "BlkManReplaceOption.h"
|
|
#include "NewTKWDlg.h"
|
|
#include "NewDbfAccessTools.h"
|
|
#ifdef _DEBUG
|
|
#define new DEBUG_NEW
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
//add by xlc on 070906
|
|
typedef struct {
|
|
LVITEM* plvi;
|
|
CString sCol2;
|
|
} lvItem, *plvItem;
|
|
#include <afxtempl.h>
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CGJKWorkspace dialog
|
|
|
|
|
|
extern TARCH_IMPEXP BOOL MoveMaterial2MSpace(AcDbObjectId idBlock);
|
|
extern BOOL DoReplaceBlock(int nControlFlag, Entity &ent, AcDbObjectId &idBlock);
|
|
extern CString GetFileNameByAllName(const TCHAR* szAllFileName);
|
|
extern CString GetPathNameByAllName(const TCHAR* szAllFileName);
|
|
//extern void MakeVisible(PickSet &ss, bool bTrue);
|
|
//extern TARCH_IMPEXP int DragInsertBlock1(const TCHAR *szBlock, int nFlag, const AcGeScale3d &scales);
|
|
extern TARCH_IMPEXP int g_nRunMode;
|
|
extern TARCH_IMPEXP int g_nProductId;
|
|
extern BOOL GetTchgjkAllItem(XStringList &lstTkwItem);
|
|
extern BOOL GetGjkwFileByMenu(const TCHAR* szMenuName, CString &csTkwFileName);
|
|
|
|
extern TCHAR g_szDirName[]; //申请自己的16K缓冲区
|
|
extern void GetRectBmpFromBmp( CWnd *pWnd ,CRect rectClient, CBitmap &bitmap);
|
|
extern BOOL SetLayerLocked(const TCHAR* szLayerName, BOOL bLock);
|
|
extern void GetAShadePickSet(PickSet &ssMat, PickSet &ssSel);
|
|
//GEOAPI BOOL arxWBlock(PickSet &ss, const TCHAR* szFileName, XPoint ptIns);
|
|
int GetNextDrawing(const TCHAR *tkName, TCHAR *dwg);
|
|
//extern GEOAPI int GetPickSetByGroup(const TCHAR *szGroup, PickSet &ss);
|
|
|
|
//modified by whl on 050926
|
|
// Status: ?
|
|
// 限制在DWG目录下
|
|
// slb不能携带路径和后缀
|
|
// Bug: 只考虑最大999
|
|
const UINT OpenMenuID = 9110;
|
|
const int g_nMaxRecentBlb = 5;
|
|
//add by cwk
|
|
void GetNameByTkwName(const TCHAR *pTkwName,CString &sName)
|
|
{
|
|
CString csName = pTkwName;
|
|
XString xsTchtkwFile(1024);
|
|
if(!FindFile(_T("shsgjk.idx"), xsTchtkwFile))
|
|
{
|
|
AfxMessageBox(_T("SYS目录下没有发行shsgjk.idx文件!"));
|
|
return ;
|
|
}
|
|
FILE *fp=_tfopen(xsTchtkwFile, _T("r"));
|
|
if(!fp)
|
|
return ;
|
|
|
|
CString csBuf,csTmp,csTkwTmp;
|
|
while(!feof(fp))
|
|
{
|
|
TCHAR sBuf[1024]=_T("");
|
|
_fgetts(sBuf, 1023, fp);
|
|
csBuf = sBuf;
|
|
csBuf.TrimLeft();
|
|
csBuf.TrimRight();
|
|
if(csBuf == _T(""))
|
|
continue;
|
|
if(csBuf.Find(_T(':')) < 0 || csBuf.Find(_T('*')) < 0)
|
|
continue;
|
|
csTmp = csBuf.Mid(csBuf.Find(_T(':')) + 1,
|
|
csBuf.Find(_T('*')) - csBuf.Find(_T(':')) - 1);
|
|
csTkwTmp = csBuf.Right(csBuf.GetLength() -csBuf.Find(_T('*')) - 1);
|
|
if (csTkwTmp == csName)
|
|
{
|
|
sName = csTmp;
|
|
break;
|
|
}
|
|
}
|
|
fclose(fp);
|
|
}
|
|
int GJKW()
|
|
{
|
|
CGJKWorkspace dlg(acedGetAcadFrame());
|
|
CTemporaryResourceOverride vTmp;
|
|
dlg.DoModal();
|
|
return RTNORM;
|
|
}
|
|
|
|
CString GetTypeByRecord(const TCHAR * szTKFile, const TCHAR * csRecord);
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CGJKWorkspace dialog
|
|
|
|
IMPLEMENT_DYNAMIC(CGJKWorkspace, CAcUiDialog)
|
|
|
|
CGJKWorkspace::CGJKWorkspace(CWnd* pParent /*=NULL*/)
|
|
: CAcUiDialog(CGJKWorkspace::IDD, pParent)
|
|
{
|
|
//{{AFX_DATA_INIT(CGJKWorkspace)
|
|
// NOTE: the ClassWizard will add member initialization here
|
|
//}}AFX_DATA_INIT
|
|
m_nOpenMode = 0;
|
|
m_bInitSize = FALSE;
|
|
m_nPageRow = 3; // 行数
|
|
m_nPageColumn = 2; // 列数
|
|
m_bLock = FALSE;
|
|
m_pOpenMenu = NULL;
|
|
m_csCurTKWFile = _T("");
|
|
m_csRet = _T("");
|
|
m_bEditLabel = FALSE;
|
|
//m_iWorkType=0;//add by whl
|
|
XString xsRoot, xsKey;
|
|
xsKey = _T("GJKMAN");
|
|
_tcscat(xsRoot, GetRegLocation());
|
|
CRegProperty regProp(xsRoot, xsKey);
|
|
regProp.SetTopRootKey(HKEY_CURRENT_USER);
|
|
regProp.GetValue(_T("PageRow"), m_nPageRow); // 行数
|
|
regProp.GetValue(_T("PageColumn"), m_nPageColumn); // 列数
|
|
|
|
m_bDragging = FALSE; //add by xlc on 070906
|
|
}
|
|
|
|
CGJKWorkspace::CGJKWorkspace(const TCHAR* szTKWName, const TCHAR* szTKName, const TCHAR* szRecord,int nOpenMode,CWnd* pParent /*=NULL*/)
|
|
: CAcUiDialog(CGJKWorkspace::IDD, pParent)
|
|
{
|
|
//{{AFX_DATA_INIT(CGJKWorkspace)
|
|
// NOTE: the ClassWizard will add member initialization here
|
|
//}}AFX_DATA_INIT
|
|
CString csTKWName , csTKName, csRecord;
|
|
csTKWName = szTKWName;
|
|
csTKName = szTKName;
|
|
csRecord = szRecord;
|
|
m_bEditLabel = FALSE;
|
|
//m_iWorkType = 0;//add by whl
|
|
m_nOpenMode = nOpenMode;
|
|
m_bInitSize = FALSE;
|
|
m_nPageRow = 3; // 行数
|
|
m_nPageColumn = 2; // 列数
|
|
m_bLock = FALSE;
|
|
m_pOpenMenu = NULL;
|
|
XString fullFile(1024);
|
|
XPathParser parser1(szTKWName), parser2(szTKName);
|
|
if(!parser2.m_sDir)
|
|
parser2.m_sDir=parser1.m_sDir;
|
|
if(!parser2.m_sDrive)
|
|
parser2.m_sDrive=parser1.m_sDrive;
|
|
fullFile << parser2.m_sDrive << parser2.m_sDir << parser2.m_sFileName << _T(".tk");
|
|
if(!FindFile(fullFile))
|
|
{
|
|
fullFile=_T("");
|
|
csRecord=_T("");
|
|
}
|
|
m_csCurTKWFile = csTKWName;
|
|
m_csLastTKName = (const TCHAR*)fullFile;
|
|
m_csCurRecord = csRecord;
|
|
if(!m_csCurRecord.IsEmpty() && !m_csLastTKName.IsEmpty())
|
|
m_csLastType = GetTypeByRecord((const TCHAR*)m_csLastTKName, csRecord);
|
|
m_csRet = _T("");
|
|
XString xsRoot, xsKey;
|
|
xsKey = _T("GJKMAN");
|
|
_tcscat(xsRoot, GetRegLocation());
|
|
|
|
//modify by xlc on 080519
|
|
{
|
|
_tcscat(xsRoot, _T("\\BLKMAN"));
|
|
TCHAR szDrive[1024]=_T(""), szDir[1024]=_T(""), szFile[1024]=_T(""),
|
|
szExt[1024]=_T("");
|
|
_tsplitpath(m_csCurTKWFile, szDrive, szDir, szFile, szExt);
|
|
|
|
//modify by xlc on 090116
|
|
//_tcscpy(xsKey, szFile);
|
|
xsKey = szFile;
|
|
}
|
|
|
|
CRegProperty regProp(xsRoot, xsKey);
|
|
regProp.SetTopRootKey(HKEY_CURRENT_USER);
|
|
regProp.GetValue(_T("PageRow"), m_nPageRow); // 行数
|
|
regProp.GetValue(_T("PageColumn"), m_nPageColumn); // 列数
|
|
|
|
m_bDragging = FALSE; //add by xlc on 070906
|
|
}
|
|
|
|
CGJKWorkspace::~CGJKWorkspace()
|
|
{
|
|
if(m_pOpenMenu)
|
|
{
|
|
m_pOpenMenu->DestroyMenu();
|
|
delete m_pOpenMenu;
|
|
}
|
|
m_cMenu.DestroyMenu();
|
|
}
|
|
|
|
void CGJKWorkspace::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CAcUiDialog::DoDataExchange(pDX);
|
|
//{{AFX_DATA_MAP(CGJKWorkspace)
|
|
DDX_Control(pDX, IDC_VSBAR, m_vsBar);
|
|
DDX_Control(pDX, IDC_S_DESCRIPTION, m_ctrlDescription);
|
|
DDX_Control(pDX, IDC_PIC_IMAGE, m_ImageBox);
|
|
DDX_Control(pDX, IDC_TK_TREE, m_treeCtrl);
|
|
DDX_Control(pDX, IDC_TK_LIST, m_listCtrl);
|
|
//}}AFX_DATA_MAP
|
|
}
|
|
|
|
BEGIN_MESSAGE_MAP(CGJKWorkspace, CAcUiDialog)
|
|
//{{AFX_MSG_MAP(CGJKWorkspace)
|
|
ON_WM_SIZE()
|
|
ON_WM_CREATE()
|
|
ON_WM_VSCROLL()
|
|
ON_WM_CONTEXTMENU()
|
|
ON_NOTIFY(LVN_ITEMCHANGED, IDC_TK_LIST, OnItemchangedTkList)
|
|
ON_NOTIFY(NM_CLICK, IDC_TK_LIST, OnClickTkList)
|
|
ON_WM_LBUTTONUP()
|
|
ON_NOTIFY(TVN_SELCHANGED, IDC_TK_TREE, OnSelchangedTkTree)
|
|
ON_NOTIFY(TBN_DROPDOWN, IDR_TOOLBAR_GJKW, OnToolbarDropDown)
|
|
ON_NOTIFY(TBN_DROPDOWN, IDR_TOOLBAR_GJKW2, OnToolbarDropDown)
|
|
ON_NOTIFY(LVN_ENDLABELEDIT, IDC_TK_LIST, OnEndlabeleditTkList)
|
|
ON_NOTIFY(LVN_BEGINLABELEDIT, IDC_TK_LIST, OnBeginlabeleditTkList)
|
|
ON_COMMAND(ID_BLK_RENAME, OnBlkRename)
|
|
ON_COMMAND(ID_BLK_SORT, OnBlkSort)
|
|
ON_COMMAND(ID_BLK_DEL, OnBlkDel)
|
|
ON_COMMAND(ID_BLK_LAYOUT, OnBlkLayout)
|
|
ON_COMMAND(ID_TK_POPUP_RENAMEKIND, OnTkPopupRenamekind)
|
|
ON_COMMAND(ID_TK_POPUP_NEW, OnTkPopupNew)
|
|
ON_COMMAND(ID_TK_POPUP_DEL, OnTkPopupDel)
|
|
ON_COMMAND(ID_BLK_DELKIND, OnBlkDelkind)
|
|
ON_COMMAND(ID_BLK_PAGEDOWN, OnBlkPagedown)
|
|
ON_COMMAND(ID_BLK_PAGEUP, OnBlkPageup)
|
|
ON_COMMAND(ID_BLK_NEWDWG, OnBlkNewdwg)
|
|
ON_WM_LBUTTONDBLCLK()
|
|
ON_COMMAND(ID_BLK_REPLACE, OnBlkReplace)
|
|
ON_WM_LBUTTONDOWN()
|
|
ON_WM_MOUSEMOVE()
|
|
ON_WM_CLOSE()
|
|
ON_COMMAND(ID_BLK_REBUILD, OnBlkRebuild)
|
|
//}}AFX_MSG_MAP
|
|
ON_COMMAND_RANGE(ID_LAYOUT1X1, ID_LAYOUT5X4, OnLayout)
|
|
|
|
//add by xlc on 070906
|
|
ON_WM_QUERYDRAGICON()
|
|
ON_NOTIFY(LVN_BEGINDRAG, IDC_TK_LIST, OnBegindragList)
|
|
ON_NOTIFY(NM_RCLICK, IDC_TK_LIST, OnRclickList)
|
|
ON_COMMAND_RANGE(ID_MENU_SSORT, ID_MENU_SSAVE, OnSort)
|
|
|
|
ON_COMMAND(ID_MENUITEM_OPENING, OnSelectOpeningLib)
|
|
ON_COMMAND(ID_MENUITEM_COL, OnSelectColLib)
|
|
ON_COMMAND(ID_MENUITEM_STAIR, OnSelectStairLib)
|
|
ON_COMMAND(ID_MENUITEM_BAL, OnSelectBalLib)
|
|
ON_COMMAND(ID_MENUITEM_STEP, OnSelectStepLib)
|
|
ON_COMMAND(ID_MENUITEM_SHEET, OnSelectSheetLib)
|
|
ON_COMMAND(ID_MENUITEM_OTHER, OnSelectOtherLib)
|
|
|
|
|
|
END_MESSAGE_MAP()
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CGJKWorkspace message handlers
|
|
BOOL CGJKWorkspace::PreTranslateMessage(MSG* pMsg)
|
|
{
|
|
if (pMsg ->message == WM_KEYDOWN)
|
|
{
|
|
if (m_bEditLabel && (pMsg ->wParam == VK_RETURN || pMsg ->wParam == VK_DELETE
|
|
|| pMsg ->wParam == VK_ESCAPE || GetKeyState(VK_CONTROL)))
|
|
{
|
|
::TranslateMessage(pMsg);
|
|
::DispatchMessage(pMsg);
|
|
return TRUE;
|
|
}
|
|
}
|
|
return CAcUiDialog::PreTranslateMessage(pMsg);
|
|
}
|
|
void CGJKWorkspace::OnClose()
|
|
{
|
|
SaveStatus();
|
|
CAcUiDialog::OnClose();
|
|
}
|
|
BOOL CGJKWorkspace::OnInitDialog()
|
|
{
|
|
CAcUiDialog::OnInitDialog();
|
|
m_ToolBar.m_pGjk = this;
|
|
m_ToolBar.m_bIsGJK = TRUE;
|
|
InitToolBar();
|
|
|
|
//add by xlc on 080829
|
|
if(m_nOpenMode == 1)
|
|
{
|
|
m_menu.LoadMenu(IDR_MENU_GJK2);
|
|
}
|
|
else
|
|
{
|
|
m_menu.LoadMenu(IDR_MENU_GJK);
|
|
}
|
|
SetMenu(&m_menu);
|
|
|
|
if(m_nOpenMode != 1)
|
|
{
|
|
XStringList lstTkwItem;
|
|
GetTchgjkAllItem(lstTkwItem);
|
|
int nLenArray = lstTkwItem.Length();
|
|
for(int i=0;i<nLenArray;i++)
|
|
{
|
|
CString csTkwItem = (const TCHAR*)lstTkwItem[i];
|
|
if(csTkwItem != _T("#") && m_ToolBar.m_pComboxCtrl != NULL)
|
|
m_ToolBar.m_pComboxCtrl->AddString(LPCTSTR(csTkwItem));
|
|
}
|
|
}
|
|
CTemporaryResourceOverride vTmp;
|
|
m_imageTree.Create( IDB_TREE1, 14, 1, RGB(255,255,255) );
|
|
m_treeCtrl.SetImageList( &m_imageTree, TVSIL_NORMAL );
|
|
m_imageList.Create( IDB_LIST, 14, 1, RGB(255,255,255) );
|
|
m_listCtrl.SetImageList( &m_imageList, LVSIL_SMALL);
|
|
|
|
m_listCtrl.ModifyStyle(LVS_SMALLICON, 0);
|
|
m_listCtrl.ModifyStyle(0, LVS_REPORT);
|
|
m_listCtrl.InsertColumn ( 0, _T("构件名称"), LVCFMT_LEFT, 400);
|
|
|
|
CRect rectDlg;
|
|
GetClientRect(rectDlg);
|
|
m_sizeDlg.cx = rectDlg.Width();
|
|
m_sizeDlg.cy = rectDlg.Height();
|
|
long nIncY = m_sizeDlg.cy - m_nOldSizeY;// 对话框绝对尺寸
|
|
long nIncX = m_sizeDlg.cx - m_nOldSizeX;
|
|
m_bInitSize = TRUE;
|
|
ResetSize(nIncX, nIncY);
|
|
|
|
m_ySplitter.BindWithControl(this, IDC_YBAR);
|
|
m_ySplitter.AttachAsAbovePane(IDC_TK_TREE);
|
|
m_ySplitter.AttachAsBelowPane(IDC_TK_LIST);
|
|
m_ySplitter.RecalcLayout();
|
|
m_ySplitter.SetMinHeight(50, 50);
|
|
m_xSplitter.BindWithControl(this, IDC_XBAR);
|
|
m_xSplitter.AttachAsLeftPane(IDC_TK_TREE);
|
|
m_xSplitter.AttachAsLeftPane(IDC_YBAR);
|
|
m_xSplitter.AttachAsLeftPane(IDC_TK_LIST);
|
|
m_xSplitter.AttachAsRightPane(IDC_PIC_IMAGE);
|
|
m_xSplitter.RecalcLayout();
|
|
m_xSplitter.SetMinWidth(20, 320);
|
|
|
|
m_ImageBox.ModifyStyle(0, SS_NOTIFY);
|
|
|
|
if(m_nOpenMode == 0)
|
|
{
|
|
LoadStatus();
|
|
}
|
|
m_ImageBox.SetPageSize(m_nPageRow, m_nPageColumn);
|
|
if(m_csCurTKWFile != _T(""))
|
|
{
|
|
m_treeCtrl.m_csLastTK = m_csLastTKName;
|
|
m_treeCtrl.m_csCurKind = m_csLastType;
|
|
m_treeCtrl.SetDataSource(m_csCurTKWFile);
|
|
m_ImageBox.m_bIsJpgShow = m_treeCtrl.m_bIsJpgShow;
|
|
}
|
|
|
|
int len = m_ImageBox.m_lstBlk.Length();
|
|
for(int i=0; i<len ; i++)
|
|
{
|
|
if(m_csCurRecord == m_ImageBox.m_lstBlk[i]->csDrawing)
|
|
{
|
|
m_ImageBox.m_lstSelected.Append(new int(i));
|
|
m_listCtrl.SetItemState(i, LVIS_SELECTED, LVIS_SELECTED);
|
|
m_ImageBox.SelectIndex(i);
|
|
m_listCtrl.EnsureVisible(m_ImageBox.m_nIndex, TRUE);
|
|
m_vsBar.SetScrollPos(m_ImageBox.CurPage() * m_nPageRow); // 使滚动条跟着发生变化
|
|
ResetStateText();
|
|
break;
|
|
}
|
|
}
|
|
if(m_nOpenMode != 1)
|
|
{
|
|
CString str = GetFileNameByAllName(m_csCurTKWFile);
|
|
CString sName;
|
|
GetNameByTkwName(LPCTSTR(str),sName);
|
|
m_ToolBar.m_pComboxCtrl->SetCurSel(m_ToolBar.m_pComboxCtrl->FindStringExact(-1,LPCTSTR(sName)));
|
|
m_ToolBar.m_sCurSelect = sName;
|
|
|
|
//add by xlc on 090728 添加图库动态菜单
|
|
AddDynMenu(TRUE);
|
|
}
|
|
return TRUE; // return TRUE unless you set the focus to a control
|
|
// EXCEPTION: OCX Property Pages should return FALSE
|
|
}
|
|
|
|
BOOL CGJKWorkspace::OnCommand(WPARAM wParam, LPARAM lParam)
|
|
{
|
|
CString csCommand, csTKWFullName;
|
|
// if(!m_pOpenMenu)
|
|
// return CAcUiDialog::OnCommand(wParam, lParam);
|
|
if(m_pOpenMenu)
|
|
m_pOpenMenu->GetMenuString(wParam, csCommand, MF_BYCOMMAND); //判断用户是否点的是弹出菜单
|
|
else
|
|
m_cMenu.GetMenuString(wParam, csCommand, MF_BYCOMMAND); //判断用户是否点的是弹出菜单
|
|
if(csCommand.IsEmpty())
|
|
return CAcUiDialog::OnCommand(wParam, lParam);
|
|
|
|
GetGjkwFileByMenu(csCommand, csTKWFullName);
|
|
if(!csTKWFullName.IsEmpty() && FindFile(csTKWFullName))
|
|
{
|
|
if (!m_pOpenMenu)
|
|
{
|
|
m_ToolBar.m_pComboxCtrl->SetCurSel(m_ToolBar.m_pComboxCtrl->FindStringExact(-1,LPCTSTR(csCommand)));
|
|
m_ToolBar.m_sCurSelect = csCommand;
|
|
}
|
|
m_csCurTKWFile = csTKWFullName;
|
|
m_treeCtrl.SetDataSource(m_csCurTKWFile);
|
|
m_ImageBox.m_bIsJpgShow = m_treeCtrl.m_bIsJpgShow;
|
|
m_treeCtrl.SelectItem(m_treeCtrl.GetRootItem());
|
|
SetDlgItemText(IDC_S_DESCRIPTION, _T("打开gjk图库组文件"));
|
|
SaveStatus();
|
|
LoadStatus();
|
|
return TRUE;
|
|
}
|
|
else if(!FindFile(csTKWFullName) && !csTKWFullName.IsEmpty())
|
|
MessageBox(_T("没有找到库文件!请确认安装是否完全。"));
|
|
return CAcUiDialog::OnCommand(wParam, lParam);
|
|
}
|
|
|
|
void CGJKWorkspace::ResetListData()
|
|
{
|
|
m_listCtrl.DeleteAllItems();
|
|
int len = m_ImageBox.m_lstBlk.Length();
|
|
m_bLock = TRUE;
|
|
for(int i=0; i<len ; i++)
|
|
m_listCtrl.InsertItem(i, m_ImageBox.m_lstBlk[i]->csItem);
|
|
len = m_ImageBox.m_lstSelected.Length();
|
|
for(i=0;i<len;i++)
|
|
{
|
|
int sel = *m_ImageBox.m_lstSelected[i];
|
|
m_listCtrl.SetItemState(sel, LVIS_SELECTED, LVIS_SELECTED);
|
|
}
|
|
m_listCtrl.EnsureVisible(m_ImageBox.m_nIndex, TRUE);
|
|
m_listCtrl.SetFocus();
|
|
m_bLock = FALSE;
|
|
}
|
|
|
|
void CGJKWorkspace::InitToolBar()
|
|
{
|
|
CTemporaryResourceOverride vTmp;
|
|
if(m_nOpenMode == 0 || m_nOpenMode == 2)
|
|
{
|
|
//int ButtonID[]={ID_COMBOBOX,ID_EMPTY,ID_EMPTY2,
|
|
// ID_BLK_NEWDWG, ID_BLK_REBUILD, 0, ID_BLK_DELKIND,
|
|
// ID_BLK_DEL, 0, ID_BLK_LAYOUT, ID_BLK_PAGEUP,
|
|
// ID_BLK_PAGEDOWN, ID_BLK_SORT, 0, ID_BLK_REPLACE, IDOK};
|
|
int ButtonID[]={ID_COMBOBOX,ID_EMPTY,ID_EMPTY2,
|
|
ID_BLK_NEWDWG, ID_BLK_REBUILD/*, 0, ID_BLK_DELKIND,
|
|
ID_BLK_DEL, 0, ID_BLK_LAYOUT, ID_BLK_PAGEUP,
|
|
ID_BLK_PAGEDOWN, ID_BLK_SORT, 0, ID_BLK_REPLACE, IDOK*/};
|
|
//m_ToolBar.InitToolBar(ButtonID, 16, IDR_TOOLBAR_GJKW, this);
|
|
m_ToolBar.InitToolBar(ButtonID, 5, IDR_TOOLBAR_GJKW, this);
|
|
}
|
|
else if(m_nOpenMode == 1)
|
|
{
|
|
int ButtonID[]={ ID_BLK_DELKIND, ID_BLK_DEL, 0,
|
|
ID_BLK_LAYOUT, ID_BLK_PAGEUP, ID_BLK_PAGEDOWN,
|
|
ID_BLK_SORT, 0, IDOK};
|
|
m_ToolBar.InitToolBar(ButtonID, 9, IDR_TOOLBAR_GJKW2, this);
|
|
}
|
|
|
|
//modify by xlc on 070919
|
|
//m_ToolBar.SetStyle(ID_BLK_SORT, TBSTYLE_CHECK);
|
|
m_ToolBar.SetStyle(ID_BLK_SORT, TBSTYLE_DROPDOWN);
|
|
|
|
m_ToolBar.SetStyle(ID_BLK_LAYOUT, TBSTYLE_DROPDOWN);
|
|
}
|
|
// 当对话框大小改变时:
|
|
void CGJKWorkspace::ResetSize(long nIncX, long nIncY)
|
|
{
|
|
CRect rectImage;
|
|
m_ImageBox.GetWindowRect(rectImage);
|
|
ScreenToClient(rectImage);
|
|
|
|
CRect rectDescription, rectScroll, rectList, rectXbar;
|
|
|
|
m_ctrlDescription.GetWindowRect(rectDescription);
|
|
ScreenToClient(rectDescription);
|
|
m_vsBar.GetWindowRect(rectScroll);
|
|
ScreenToClient(rectScroll);
|
|
m_listCtrl.GetWindowRect(rectList);
|
|
ScreenToClient(rectList);
|
|
CWnd *pWnd = GetDlgItem(IDC_XBAR);
|
|
ASSERT(pWnd);
|
|
pWnd->GetWindowRect(rectXbar);
|
|
ScreenToClient(rectXbar);
|
|
|
|
m_ImageBox.MoveWindow(rectImage.left, rectImage.top,
|
|
rectImage.Width() + nIncX, rectImage.Height() + nIncY);
|
|
m_ctrlDescription.MoveWindow(rectDescription.left, rectDescription.top + nIncY,
|
|
rectDescription.Width() + nIncX, rectDescription.Height());
|
|
m_vsBar.MoveWindow(rectScroll.left + nIncX, rectScroll.top,
|
|
rectScroll.Width(), rectScroll.Height() + nIncY);
|
|
m_listCtrl.MoveWindow(rectList.left, rectList.top,
|
|
rectList.Width(), rectList.Height() + nIncY);
|
|
pWnd->MoveWindow(rectXbar.left, rectXbar.top,
|
|
rectXbar.Width(), rectXbar.Height() + nIncY);
|
|
|
|
}
|
|
|
|
void CGJKWorkspace::OnSize(UINT nType, int cx, int cy)
|
|
{
|
|
if(m_bInitSize && (!nType || nType==SIZE_MAXIMIZED)) {
|
|
CSize sizeOld = m_sizeDlg;
|
|
m_sizeDlg.cx = cx;
|
|
m_sizeDlg.cy = cy;
|
|
long nIncY = m_sizeDlg.cy - sizeOld.cy;
|
|
long nIncX = m_sizeDlg.cx - sizeOld.cx;
|
|
ResetSize(nIncX, nIncY);
|
|
m_ImageBox.Wash(); // 刷新显示slide 之间的间隔
|
|
}
|
|
|
|
}
|
|
|
|
int CGJKWorkspace::OnCreate(LPCREATESTRUCT lpCreateStruct)
|
|
{
|
|
if (CAcUiDialog::OnCreate(lpCreateStruct) == -1)
|
|
return -1;
|
|
CRect rect;
|
|
GetClientRect(rect);
|
|
m_nOldSizeX=rect.Width();
|
|
m_nOldSizeY=rect.Height();
|
|
|
|
return 0;
|
|
}
|
|
|
|
// 改变树、布局、初始 时调用
|
|
BOOL CGJKWorkspace::InitVSBar()
|
|
{
|
|
int totalRec, pageSize, imageRowNum, imageColNum;
|
|
imageRowNum = m_nPageRow;
|
|
imageColNum = m_nPageColumn;
|
|
pageSize = imageRowNum * imageColNum;
|
|
|
|
totalRec = m_ImageBox.GetTotalRecords();
|
|
if(totalRec <= pageSize || totalRec == 0){
|
|
m_vsBar.ShowScrollBar(FALSE);
|
|
return FALSE;
|
|
}
|
|
else
|
|
m_vsBar.ShowScrollBar(TRUE);
|
|
|
|
SCROLLINFO scrollInfo;
|
|
scrollInfo.cbSize = sizeof(SCROLLINFO);
|
|
scrollInfo.fMask = SIF_ALL;
|
|
scrollInfo.nMin = 0;
|
|
scrollInfo.nMax = ((totalRec-1) / pageSize+1) * imageRowNum-1;
|
|
scrollInfo.nPage = imageRowNum;
|
|
scrollInfo.nPos = m_ImageBox.CurPage() * imageRowNum;
|
|
|
|
m_vsBar.SetScrollInfo(&scrollInfo, TRUE);
|
|
return TRUE;
|
|
}
|
|
|
|
void CGJKWorkspace::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
|
|
{
|
|
if(pScrollBar != &m_vsBar){
|
|
CAcUiDialog::OnVScroll(nSBCode, nPos, pScrollBar);
|
|
return;
|
|
}
|
|
|
|
UINT nEndPos=pScrollBar->GetScrollPos();
|
|
switch(nSBCode)
|
|
{
|
|
case SB_THUMBPOSITION: //拖动滑块
|
|
m_ImageBox.GoPage(nPos/m_nPageRow);
|
|
nEndPos = nPos;
|
|
break;
|
|
case SB_LINEDOWN:
|
|
m_ImageBox.GoPage(m_ImageBox.CurPage() + 1);
|
|
nEndPos += m_nPageRow;
|
|
break;
|
|
case SB_PAGEDOWN:
|
|
m_ImageBox.GoPage(m_ImageBox.CurPage() + 1);
|
|
nEndPos += m_nPageRow;
|
|
break;
|
|
case SB_LINEUP:
|
|
m_ImageBox.GoPage(m_ImageBox.CurPage() - 1);
|
|
nEndPos -= m_nPageRow;
|
|
break;
|
|
case SB_PAGEUP:
|
|
m_ImageBox.GoPage(m_ImageBox.CurPage() - 1);
|
|
nEndPos -= m_nPageRow;
|
|
break;
|
|
}
|
|
pScrollBar->SetScrollPos(nEndPos);
|
|
ResetStateText();
|
|
CAcUiDialog::OnVScroll(nSBCode, nPos, pScrollBar);
|
|
}
|
|
|
|
void CGJKWorkspace::HideDialog(BOOL Flag)
|
|
{
|
|
if (Flag)
|
|
{
|
|
GetParent()->EnableWindow(TRUE);
|
|
GetParent()->SetFocus();
|
|
GetParent()->SetActiveWindow();
|
|
ShowWindow(SW_HIDE);
|
|
}
|
|
else
|
|
{
|
|
GetParent()->EnableWindow(FALSE);
|
|
EnableWindow(TRUE);
|
|
SetActiveWindow();
|
|
ShowWindow(SW_SHOW);
|
|
}
|
|
}
|
|
int CGJKWorkspace::AddImage2Dwb(const TCHAR* szTKName, const TCHAR* szDrawing, BOOL bIsRebuild)
|
|
{
|
|
CString csTKName, csDrawing;
|
|
csTKName = szTKName;
|
|
csDrawing = szDrawing;
|
|
|
|
PickSet ss(SS_FREE);
|
|
Entity ent;
|
|
CString sName = GetFileNameByAllName(szTKName);
|
|
int rc;
|
|
CTkwFile tkw(m_csCurTKWFile);
|
|
if (sName == _T("Other"))
|
|
{
|
|
rc = SelectEntities(_T("\n选择组成构件的图元:"), ss,RBList(RTDXF0, _T("*"), NULL));
|
|
if(rc != RTNORM && !bIsRebuild)
|
|
return RTERROR;
|
|
else if(rc != RTNORM && bIsRebuild)
|
|
{
|
|
return RebuildSld(csTKName);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
while(1)
|
|
{
|
|
rc = SelectEntity(_T("\n选择组成构件的图元:"), ent, RBList(RTDXF0, LPCTSTR(tkw.m_csDxfCode),NULL));
|
|
if (rc == RTREJ)
|
|
return RTERROR;
|
|
if(rc != RTNORM && rc != RTCAN )
|
|
continue;
|
|
if(rc != RTNORM && !bIsRebuild)
|
|
return RTERROR;
|
|
else if (rc == RTCAN)
|
|
return RTCAN;
|
|
else if(rc != RTNORM && bIsRebuild)
|
|
{
|
|
return RebuildSld(csTKName);
|
|
}
|
|
ss += ent;
|
|
if (ss.Length() == 1)
|
|
break;
|
|
}
|
|
}
|
|
int nRetCode=RTERROR;
|
|
XPoint center, basePt;
|
|
ads_real sx, sy, sz;
|
|
ss.GetExtend(center, &sx, &sy, &sz);
|
|
center.z -= sz/2.0; //基点在下方
|
|
adsout << _T("\n构件基点<") << center << _T(">:");
|
|
rc=ads_getpoint(Wcs2Ucs(center), _T(""), basePt);
|
|
if(rc==RTNONE)
|
|
{
|
|
basePt=Wcs2Ucs(center);
|
|
rc=RTNORM;
|
|
}
|
|
if(rc==RTNORM)
|
|
{
|
|
PickSet ssAll(SS_FREE);
|
|
ssAll.Get(_T("X"));
|
|
ssAll -= ss;
|
|
|
|
//add by xlc on 080812 解决对局部隐藏对象的影响
|
|
PickSet ssHide(SS_FREE);
|
|
GetPickSetByGroup(_T("_TCH_HIDE_GROUP"), ssHide);
|
|
ssAll -= ssHide;
|
|
|
|
MakeVisible(ssAll, false);
|
|
XString xsFullSld(1024), xsFullDwg(1024);
|
|
BOOL bHide = FALSE;
|
|
TCHAR dwgPrefix[1024]=_T("");
|
|
GetTempPath(1023, dwgPrefix);
|
|
if(dwgPrefix[_tcslen(dwgPrefix)-1]!=_T('\\'))
|
|
_tcscat(dwgPrefix, _T("\\"));
|
|
_tcscat(dwgPrefix, _T("SRTEMP\\"));
|
|
MakeDir(dwgPrefix);
|
|
xsFullSld << dwgPrefix << csDrawing << _T(".sld");
|
|
xsFullDwg << dwgPrefix << csDrawing << _T(".dwg");
|
|
while(1)
|
|
{
|
|
const TCHAR *szPrompt=_T("\n制作幻灯片(请用zoom调整合适)或 [消隐(H)/不制作返回(X)]<制作>:");
|
|
XString sKeyword;
|
|
int nRet = 0;
|
|
INITGET_BEG(0, _T("H X"));
|
|
nRet = ads_getkword(szPrompt, sKeyword);
|
|
INITGET_END();
|
|
if(nRet == RTNONE)
|
|
break;
|
|
if(sKeyword[0]==_T('H'))
|
|
{
|
|
bHide = TRUE;
|
|
}
|
|
else
|
|
{
|
|
MakeVisible(ssAll, true);
|
|
return RTERROR;
|
|
}
|
|
}
|
|
if(bHide)
|
|
{
|
|
XPushVar<int> splframe(_T("SPLFRAME"), 0);
|
|
SHads_command(RTSTR, _T("HIDE"), RTNONE);
|
|
SHads_command(RTSTR, _T("MSLIDE"), RTSTR, (TCHAR *)xsFullSld, RTNONE);
|
|
SHads_command(RTSTR, _T("REGEN"), RTNONE);
|
|
}
|
|
else
|
|
{
|
|
SHads_command(RTSTR, _T("MSLIDE"), RTSTR, (TCHAR *)xsFullSld, RTNONE);
|
|
}
|
|
|
|
XString xsSlbFile(1024);
|
|
xsSlbFile << GetPathNameByAllName(csTKName) << GetFileNameByAllName(csTKName) << _T(".SLB");
|
|
XSlideLib slbMan(xsSlbFile);
|
|
if(!slbMan)
|
|
{
|
|
MakeVisible(ssAll, true);
|
|
return RTERROR;
|
|
}
|
|
slbMan.Append(xsFullSld);
|
|
_tremove(xsFullSld);
|
|
|
|
if(!ss)
|
|
{
|
|
MakeVisible(ssAll, true);
|
|
return RTERROR;
|
|
}
|
|
|
|
if(arxWBlock(ss, xsFullDwg, Ucs2Wcs(basePt)))
|
|
{
|
|
XString xsDwbFile(1024);
|
|
xsDwbFile << GetPathNameByAllName(csTKName) << GetFileNameByAllName(csTKName) << _T(".DWB");
|
|
XDrawingLib dwbMan(xsDwbFile);
|
|
if(!dwbMan) {
|
|
}
|
|
else
|
|
{
|
|
dwbMan.Append(xsFullDwg);
|
|
nRetCode=RTNORM;
|
|
}
|
|
_tremove(xsFullDwg);
|
|
}
|
|
MakeVisible(ssAll, true);
|
|
}
|
|
else
|
|
{
|
|
return RTERROR;
|
|
}
|
|
return RTNORM;
|
|
}
|
|
|
|
// 布局
|
|
void CGJKWorkspace::OnLayout(UINT nID)
|
|
{
|
|
switch (nID)
|
|
{
|
|
case ID_LAYOUT1X1:
|
|
m_ImageBox.SetPageSize(1,1);
|
|
m_nPageRow = 1;
|
|
m_nPageColumn = 1;
|
|
break;
|
|
case ID_LAYOUT2X1:
|
|
m_ImageBox.SetPageSize(2,1);
|
|
m_nPageRow = 2;
|
|
m_nPageColumn = 1;
|
|
break;
|
|
case ID_LAYOUT2X2:
|
|
m_ImageBox.SetPageSize(2,2);
|
|
m_nPageRow = 2;
|
|
m_nPageColumn = 2;
|
|
break;
|
|
case ID_LAYOUT3X2:
|
|
m_ImageBox.SetPageSize(3,2);
|
|
m_nPageRow = 3;
|
|
m_nPageColumn = 2;
|
|
break;
|
|
case ID_LAYOUT3X3:
|
|
m_ImageBox.SetPageSize(3,3);
|
|
m_nPageRow = 3;
|
|
m_nPageColumn = 3;
|
|
break;
|
|
case ID_LAYOUT4X3:
|
|
m_ImageBox.SetPageSize(4,3);
|
|
m_nPageRow = 4;
|
|
m_nPageColumn = 3;
|
|
break;
|
|
case ID_LAYOUT4X4:
|
|
m_ImageBox.SetPageSize(4,4);
|
|
m_nPageRow = 4;
|
|
m_nPageColumn = 4;
|
|
break;
|
|
case ID_LAYOUT5X4:
|
|
m_ImageBox.SetPageSize(5,4);
|
|
m_nPageRow = 5;
|
|
m_nPageColumn = 4;
|
|
break;
|
|
}
|
|
m_ImageBox.Wash();
|
|
m_ImageBox.SetupImage(TRUE);
|
|
InitVSBar();
|
|
}
|
|
|
|
//add by xlc on 070919
|
|
void CGJKWorkspace::OnSort(UINT nID)
|
|
{
|
|
switch (nID)
|
|
{
|
|
case ID_MENU_SSORT:
|
|
{
|
|
m_ImageBox.m_bSort = !m_ImageBox.m_bSort;
|
|
if(m_ImageBox.m_bSort)
|
|
{
|
|
m_ImageBox.SetSort();
|
|
SetDlgItemText(IDC_S_DESCRIPTION, _T("按排序图块名次序显示"));
|
|
}
|
|
else
|
|
{
|
|
SetDlgItemText(IDC_S_DESCRIPTION, _T("按图块入库次序显示"));
|
|
ResetImage();
|
|
}
|
|
InitVSBar();
|
|
ResetListData();
|
|
}
|
|
break;
|
|
case ID_MENU_SSAVE:
|
|
if(MessageBox(_T("您确定要保存当前的排序吗?"),_T(""),MB_OKCANCEL|MB_ICONQUESTION) != IDOK)
|
|
return;
|
|
|
|
if(m_ImageBox.m_bSort)
|
|
{
|
|
ModifyDatabaseFile();
|
|
m_ImageBox.m_bSort = FALSE;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
void CGJKWorkspace::OnContextMenu(CWnd* pWnd, CPoint point)
|
|
{
|
|
if(m_ImageBox.m_bRMouseDown)
|
|
{
|
|
CMenu menu;
|
|
menu.LoadMenu(IDR_MENU_IMAGELAYOUT1);
|
|
if((m_nOpenMode == 0 || m_nOpenMode == 2) && IsInRect(IDC_PIC_IMAGE, point))
|
|
{
|
|
CMenu *pSubMenu = menu.GetSubMenu(0);
|
|
if(pSubMenu)
|
|
pSubMenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON,
|
|
point.x, point.y, this, NULL);
|
|
}
|
|
m_ImageBox.m_bRMouseDown=FALSE;
|
|
}
|
|
}
|
|
|
|
BOOL CGJKWorkspace::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;
|
|
}
|
|
|
|
//存储状态
|
|
void CGJKWorkspace::SaveStatus()
|
|
{
|
|
//modified by yujie 070511
|
|
//XString xsRoot, xsKey;
|
|
//xsKey = _T("GJKMAN");
|
|
TCHAR xsKey[1024]=_T("GJKMAN");
|
|
XString xsRoot;
|
|
|
|
|
|
_tcscat(xsRoot, GetRegLocation());
|
|
if(m_nOpenMode == 1)
|
|
{
|
|
_tcscat(xsRoot, _T("\\BLKMAN"));
|
|
TCHAR szDrive[1024]=_T(""), szDir[1024]=_T(""), szFile[1024]=_T(""),
|
|
szExt[1024]=_T("");
|
|
_tsplitpath(m_csCurTKWFile, szDrive, szDir, szFile, szExt);
|
|
|
|
_tcscpy(xsKey, szFile);
|
|
}
|
|
|
|
CRegProperty regProp(xsRoot, xsKey);
|
|
|
|
regProp.SetTopRootKey(HKEY_CURRENT_USER);
|
|
regProp.SetValue(_T("GJKName"), m_csCurTKWFile);
|
|
|
|
m_treeCtrl.GetNodeAllPath(m_treeCtrl.GetSelectedItem(), m_csLastTKName, m_csLastType);
|
|
regProp.SetValue(_T("CurGJKName"), m_csLastTKName);
|
|
if(m_csLastType == _T(""))
|
|
regProp.SetValue(_T("CurType"), _T("*"));
|
|
else
|
|
regProp.SetValue(_T("CurType"), m_csLastType);
|
|
if(m_ImageBox.m_lstSelected.Length() == 1)
|
|
{
|
|
int idx = *m_ImageBox.m_lstSelected[0];
|
|
if(idx>=0 && idx<m_ImageBox.m_lstBlk.Length()) //add by yujie 070523
|
|
{
|
|
m_csCurRecord = m_ImageBox.m_lstBlk[idx]->csDrawing;
|
|
}
|
|
}
|
|
regProp.SetValue(_T("CurRecord"), m_csCurRecord);
|
|
regProp.SetValue(_T("PageRow"), m_nPageRow); // 行数
|
|
regProp.SetValue(_T("PageColumn"), m_nPageColumn); // 列数
|
|
|
|
XStringList lstTkwItem;
|
|
GetTchgjkAllItem(lstTkwItem);
|
|
|
|
int nLenArray = lstTkwItem.Length();
|
|
BOOL bFlag = FALSE;
|
|
for(int i=0;i<nLenArray;i++)
|
|
{
|
|
if(lstTkwItem[i] != _T("#"))
|
|
{
|
|
CString csTKWFullName;
|
|
GetGjkwFileByMenu(lstTkwItem[i], csTKWFullName);
|
|
if(_tcsicmp(csTKWFullName, m_csCurTKWFile) == 0)
|
|
{
|
|
bFlag = TRUE;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if(!bFlag)
|
|
{
|
|
int nLen=m_lstBlbNames.Length();
|
|
for(int i=0; i<nLen; i++)
|
|
{
|
|
if(_tcsicmp((const TCHAR*)m_csCurTKWFile, (const TCHAR*)m_lstBlbNames[i]) == 0)
|
|
{
|
|
m_lstBlbNames.Remove(i);
|
|
nLen--;
|
|
break;
|
|
}
|
|
}
|
|
if(nLen >= g_nMaxRecentBlb) m_lstBlbNames.Remove(0);
|
|
m_lstBlbNames.Append(tstrnew(m_csCurTKWFile));
|
|
nLen=m_lstBlbNames.Length();
|
|
for(i=0; i<nLen; i++)
|
|
{
|
|
if(i<g_nMaxRecentBlb)
|
|
{
|
|
XString sKey(1024), sValue(1024);
|
|
sKey << _T("The recent TKW") << (i + 1);
|
|
sValue << m_lstBlbNames[i];
|
|
regProp.SetValue(sKey, sValue);
|
|
}
|
|
else break;
|
|
}
|
|
}
|
|
}
|
|
|
|
//读取状态
|
|
void CGJKWorkspace::LoadStatus()
|
|
{
|
|
//modified by yujie 070511
|
|
//XString xsRoot, xsKey;
|
|
//xsKey = _T("GJKMAN");
|
|
XString xsRoot;
|
|
TCHAR xsKey[1024]=_T("GJKMAN");
|
|
|
|
_tcscat(xsRoot, GetRegLocation());
|
|
if(m_nOpenMode == 1)
|
|
{
|
|
_tcscat(xsRoot, _T("\\BLKMAN"));
|
|
TCHAR szDrive[1024]=_T(""), szDir[1024]=_T(""), szFile[1024]=_T(""),
|
|
szExt[1024]=_T("");
|
|
_tsplitpath(m_csCurTKWFile, szDrive, szDir, szFile, szExt);
|
|
|
|
_tcscpy(xsKey, szFile);
|
|
}
|
|
|
|
CRegProperty regProp(xsRoot, xsKey);
|
|
|
|
regProp.SetTopRootKey(HKEY_CURRENT_USER);
|
|
regProp.GetValue(_T("GJKName"), m_csCurTKWFile);
|
|
regProp.GetValue(_T("CurGJKName"), m_csLastTKName);
|
|
regProp.GetValue(_T("CurType"), m_csLastType);
|
|
regProp.GetValue(_T("CurRecord"), m_csCurRecord);
|
|
regProp.GetValue(_T("PageRow"), m_nPageRow); // 行数
|
|
regProp.GetValue(_T("PageColumn"), m_nPageColumn); // 列数
|
|
}
|
|
|
|
void CGJKWorkspace::OnItemchangedTkList(NMHDR* pNMHDR, LRESULT* pResult)
|
|
{
|
|
if(m_bLock)
|
|
return;
|
|
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
|
|
int nSel = pNMListView->iItem;
|
|
|
|
POSITION pos = m_listCtrl.GetFirstSelectedItemPosition();
|
|
m_ImageBox.m_lstSelected.Reset();
|
|
|
|
while (pos)
|
|
{
|
|
int nItem = m_listCtrl.GetNextSelectedItem(pos);
|
|
m_ImageBox.m_lstSelected.Append(new int(nItem));
|
|
}
|
|
m_ImageBox.SelectIndex(nSel);
|
|
m_vsBar.SetScrollPos(m_ImageBox.CurPage() * m_nPageRow); // 使滚动条跟着发生变化
|
|
ResetStateText();
|
|
*pResult = 0;
|
|
}
|
|
|
|
void CGJKWorkspace::OnClickTkList(NMHDR* pNMHDR, LRESULT* pResult)
|
|
{
|
|
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
|
|
int nSel = pNMListView->iItem;
|
|
POSITION pos = m_listCtrl.GetFirstSelectedItemPosition();
|
|
if(nSel < 0 && !pos)
|
|
{ //取消选中
|
|
m_ImageBox.m_lstSelected.Reset();
|
|
m_ImageBox.ClearBkColor();
|
|
*pResult = 0;
|
|
ResetStateText();
|
|
return;
|
|
}
|
|
*pResult = 0;
|
|
}
|
|
|
|
//add by xlc on 070919
|
|
void CGJKWorkspace::OnRclickList(NMHDR* pNMHDR, LRESULT* pResult)
|
|
{
|
|
if(!m_bDragging)
|
|
{
|
|
POINT ptClient;
|
|
::GetCursorPos((LPPOINT)&ptClient);
|
|
|
|
CMenu menu;
|
|
menu.LoadMenu(IDR_MENU_IMAGELAYOUT);
|
|
|
|
CMenu *pSubMenu = menu.GetSubMenu(0);
|
|
if(pSubMenu)
|
|
{
|
|
pSubMenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON,
|
|
ptClient.x, ptClient.y, this, NULL);
|
|
}
|
|
}
|
|
|
|
*pResult = 0;
|
|
}
|
|
|
|
void CGJKWorkspace::OnLButtonDown(UINT nFlags, CPoint point)
|
|
{
|
|
if(point.x == -1 && point.y == -1 && !IsLock())
|
|
{ //鼠标拖拽
|
|
SetCapture();
|
|
m_treeCtrl.m_bCellIsDragging = TRUE;
|
|
m_treeCtrl.m_dragTarget = NULL;
|
|
}
|
|
CAcUiDialog::OnLButtonDown(nFlags, point);
|
|
}
|
|
|
|
void CGJKWorkspace::OnMouseMove(UINT nFlags, CPoint point)
|
|
{
|
|
//add by xlc on 070906
|
|
if (m_bDragging)
|
|
{
|
|
CPoint pt(point); //当前鼠标位置
|
|
RECT lpRect;
|
|
m_listCtrl.GetItemRect(0,&lpRect,LVIR_BOUNDS);
|
|
|
|
int height = lpRect.bottom - lpRect.top;
|
|
int dist = point.y - lpRect.top;
|
|
int n = dist / height+1;
|
|
pt.y = lpRect.top + n * height;
|
|
pt.x = 0; //插入位置点
|
|
|
|
ClientToScreen(&pt);
|
|
m_pDragImage->DragMove(pt);
|
|
m_pDragImage->DragShowNolock(false);
|
|
|
|
pt.y = point.y;//lpRect.top + n * height;
|
|
pt.x = 20;
|
|
ClientToScreen(&pt);
|
|
|
|
CWnd* pDropWnd = WindowFromPoint (pt);
|
|
if(pDropWnd == NULL)
|
|
return;
|
|
|
|
if (pDropWnd != m_pDropWnd)
|
|
{
|
|
if (m_nDropIndex != -1)
|
|
{
|
|
TRACE("m_nDropIndex is -1\n");
|
|
CListCtrl* pList = (CListCtrl*)m_pDropWnd;
|
|
if(pList == NULL)
|
|
return;
|
|
|
|
pList->SetItemState (m_nDropIndex, 0, LVIS_DROPHILITED);
|
|
pList->RedrawItems (m_nDropIndex, m_nDropIndex);
|
|
pList->UpdateWindow ();
|
|
m_nDropIndex = -1;
|
|
}
|
|
else
|
|
{
|
|
TRACE("m_nDropIndex is not -1\n");
|
|
CListCtrl* pList = (CListCtrl*)m_pDropWnd;
|
|
if(pList == NULL)
|
|
return;
|
|
|
|
int i = 0;
|
|
int nCount = pList->GetItemCount();
|
|
for(i = 0; i < nCount; i++)
|
|
{
|
|
pList->SetItemState(i, 0, LVIS_DROPHILITED);
|
|
}
|
|
pList->RedrawItems(0, nCount);
|
|
pList->UpdateWindow();
|
|
}
|
|
}
|
|
|
|
m_pDropWnd = pDropWnd;
|
|
pDropWnd->ScreenToClient(&pt);
|
|
|
|
CRect rcList;
|
|
m_listCtrl.GetWindowRect(&rcList);
|
|
CPoint pntScreen(point);
|
|
ClientToScreen(&pntScreen);
|
|
if(rcList.PtInRect(pntScreen))
|
|
{
|
|
m_bLock = TRUE;
|
|
SetCursor(LoadCursor(NULL, IDC_ARROW));
|
|
UINT uFlags;
|
|
CListCtrl* pList = (CListCtrl*)pDropWnd;
|
|
if(pList == NULL)
|
|
return;
|
|
|
|
pList->SetItemState (m_nDropIndex, 0, LVIS_DROPHILITED);
|
|
pList->RedrawItems (m_nDropIndex, m_nDropIndex);
|
|
|
|
m_nDropIndex = ((CListCtrl*)pDropWnd)->HitTest(pt, &uFlags);
|
|
if(pList->RedrawItems(m_nDropIndex, m_nDropIndex))
|
|
pList->UpdateWindow();
|
|
m_bLock = FALSE;
|
|
m_pDragImage->DragShowNolock(true);
|
|
}
|
|
else
|
|
{
|
|
SetCursor(LoadCursor(NULL, IDC_NO));
|
|
}
|
|
|
|
}
|
|
else
|
|
|
|
{
|
|
if(m_treeCtrl.m_bCellIsDragging)
|
|
{
|
|
HICON hIcon;
|
|
CPoint pntScreen(point);
|
|
ClientToScreen(&pntScreen);
|
|
CRect rcTree;
|
|
m_treeCtrl.GetWindowRect(rcTree);
|
|
CWinApp* pApp = AfxGetApp();
|
|
{
|
|
CTemporaryResourceOverride vTemp;
|
|
if( rcTree.PtInRect( pntScreen ) == TRUE )
|
|
{ // 鼠标落在TREE中换光标
|
|
hIcon = pApp->LoadCursor(IDC_CUR_MULTMOVE);
|
|
SetCursor(hIcon);
|
|
}
|
|
else
|
|
{
|
|
HICON hIcon = ::LoadCursor( NULL,IDC_NO );
|
|
SetCursor(hIcon);
|
|
}
|
|
|
|
}
|
|
CPoint ptTree( point );
|
|
MapWindowPoints( &m_treeCtrl, &ptTree, 1 );
|
|
UINT uHitTest = TVHT_ONITEM;
|
|
m_treeCtrl.m_dragTarget = m_treeCtrl.HitTest(ptTree, &uHitTest);
|
|
if(m_treeCtrl.m_dragTarget != NULL)
|
|
m_treeCtrl.SelectDropTarget(m_treeCtrl.m_dragTarget);
|
|
}
|
|
}
|
|
CAcUiDialog::OnMouseMove(nFlags, point);
|
|
}
|
|
|
|
|
|
void CGJKWorkspace::OnLButtonUp(UINT nFlags, CPoint point)
|
|
{
|
|
//modify by xlc on 070906
|
|
if (m_bDragging)
|
|
{
|
|
ReleaseCapture ();
|
|
|
|
m_pDragImage->DragLeave (GetDesktopWindow ()); //结束拖拽
|
|
m_pDragImage->EndDrag ();
|
|
delete m_pDragImage;
|
|
|
|
CPoint pt (point); //当前鼠标坐标
|
|
ClientToScreen (&pt);
|
|
|
|
CWnd* pDropWnd = WindowFromPoint (pt);
|
|
ASSERT (pDropWnd);
|
|
|
|
if (pDropWnd->IsKindOf (RUNTIME_CLASS (CListCtrl)))
|
|
{
|
|
m_pDropList = (CListCtrl*)pDropWnd;
|
|
DropItemOnList(m_pDragList, m_pDropList);
|
|
}
|
|
|
|
m_bDragging = FALSE;
|
|
}
|
|
else
|
|
|
|
{
|
|
if(point.x == -1 && point.y == -1)
|
|
{
|
|
m_bLock = TRUE;
|
|
POSITION pos = m_listCtrl.GetFirstSelectedItemPosition();
|
|
while (pos)
|
|
{
|
|
int nItem = m_listCtrl.GetNextSelectedItem(pos);
|
|
m_listCtrl.SetItemState(nItem, 0, LVIS_SELECTED);
|
|
}
|
|
int len = m_ImageBox.m_lstSelected.Length();
|
|
for(int i=0;i<len;i++)
|
|
{
|
|
int sel = *m_ImageBox.m_lstSelected[i];
|
|
m_listCtrl.SetItemState(sel, LVIS_SELECTED, LVIS_SELECTED);
|
|
}
|
|
m_listCtrl.EnsureVisible(m_ImageBox.m_nIndex, TRUE);
|
|
m_listCtrl.SetFocus();
|
|
ResetStateText();
|
|
m_bLock = FALSE;
|
|
}
|
|
if(m_treeCtrl.m_bCellIsDragging)
|
|
{
|
|
ReleaseCapture();
|
|
XStringList lstSelBlk;
|
|
for(int i=0;i<m_ImageBox.m_lstSelected.Length();i++)
|
|
{
|
|
int sel = *m_ImageBox.m_lstSelected[i];
|
|
lstSelBlk.Append(tstrnew(m_ImageBox.m_lstBlk[sel]->csDrawing));
|
|
}
|
|
m_treeCtrl.m_bCellIsDragging = FALSE;
|
|
m_treeCtrl.SelectDropTarget(NULL);
|
|
if(m_treeCtrl.DoDragBlk(lstSelBlk))
|
|
{
|
|
if(m_treeCtrl.m_bCopyAndDel)
|
|
{
|
|
m_treeCtrl.m_bCopyAndDel = FALSE;
|
|
m_ImageBox.m_lstSelected.Reset();
|
|
}
|
|
ResetImage(TRUE);
|
|
}
|
|
m_treeCtrl.m_dragTarget = NULL;
|
|
}
|
|
}
|
|
CAcUiDialog::OnLButtonUp(nFlags, point);
|
|
}
|
|
|
|
|
|
|
|
void CGJKWorkspace::OnLButtonDblClk(UINT nFlags, CPoint point)
|
|
{
|
|
if(point.x == -1 && point.y == -1 && (!m_bLock))
|
|
{
|
|
if(GetCapture()==this)
|
|
{
|
|
ReleaseCapture();
|
|
m_treeCtrl.SelectDropTarget(NULL);
|
|
}
|
|
OnOK();
|
|
}
|
|
else
|
|
{
|
|
CAcUiDialog::OnLButtonDblClk(nFlags, point);
|
|
}
|
|
}
|
|
|
|
void CGJKWorkspace::OnSelchangedTkTree(NMHDR* pNMHDR, LRESULT* pResult)
|
|
{
|
|
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
|
|
BOOL bFlag = TRUE;
|
|
m_ImageBox.m_bIsJpgShow = m_treeCtrl.m_bIsJpgShow;
|
|
if(!m_treeCtrl.m_bMerge)
|
|
{
|
|
CString csCurTKName, csCurType;
|
|
m_treeCtrl.GetNodeAllPath(m_treeCtrl.GetSelectedItem(), csCurTKName, csCurType);
|
|
m_treeCtrl.m_csCurKind = csCurType;
|
|
if(csCurTKName != _T("") && csCurType == _T(""))
|
|
{
|
|
bFlag = FALSE;
|
|
SetDlgItemText(IDC_S_DESCRIPTION, XString(_T("当前构件库文件:%s"), (const TCHAR*)csCurTKName));
|
|
}
|
|
else if(csCurTKName == _T(""))
|
|
{
|
|
bFlag = FALSE;
|
|
SetDlgItemText(IDC_S_DESCRIPTION, XString(_T("当前构件组文件:%s"), (const TCHAR*)m_csCurTKWFile));
|
|
}
|
|
}
|
|
ResetImage();
|
|
if(bFlag)
|
|
ResetStateText();
|
|
*pResult = 0;
|
|
}
|
|
|
|
void CGJKWorkspace::OnBeginlabeleditTkList(NMHDR* pNMHDR, LRESULT* pResult)
|
|
{
|
|
LV_DISPINFO* pDispInfo = (LV_DISPINFO*)pNMHDR;
|
|
m_bLock = TRUE;
|
|
*pResult = 0;
|
|
}
|
|
|
|
void CGJKWorkspace::OnEndlabeleditTkList(NMHDR* pNMHDR, LRESULT* pResult)
|
|
{
|
|
LV_DISPINFO* pDispInfo = (LV_DISPINFO*)pNMHDR;
|
|
int sel = pDispInfo->item.iItem;
|
|
if((pDispInfo->item.pszText != NULL)&&(sel != -1))
|
|
{
|
|
CString csTKName = m_ImageBox.m_lstBlk[sel]->csTKFile;
|
|
CString sKind, sItem, sText; //类别,名称
|
|
CodeBase db;
|
|
XDbfTable *pTable = db.Open(csTKName);
|
|
if(!pTable)
|
|
{
|
|
MessageBox(XString(_T("%s文件只读或损坏"), (const TCHAR *)csTKName));
|
|
m_bLock = FALSE;
|
|
return;
|
|
}
|
|
sText = m_ImageBox.m_lstBlk[sel]->csDrawing;
|
|
for(pTable->MoveFirst(); !pTable->IsEOF(); pTable->MoveNext())
|
|
{
|
|
GET_FIELD(pTable, _T("kind"), sKind);
|
|
GET_FIELD(pTable, _T("drawing"), sItem);
|
|
if(sItem == sText)
|
|
{
|
|
SET_FIELD(pTable, _T("item"), pDispInfo->item.pszText);
|
|
m_ImageBox.m_lstBlk[sel]->csItem = pDispInfo->item.pszText;
|
|
//ResetListData();
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
m_bLock = FALSE;
|
|
*pResult = 1;
|
|
}
|
|
|
|
|
|
void CGJKWorkspace::ResetImage(BOOL bReservePage)
|
|
{
|
|
int iPage = m_ImageBox.CurPage();
|
|
DList<int> lstSelected; //选中的项
|
|
for(int m=0;m<m_ImageBox.m_lstSelected.Length();m++)
|
|
{
|
|
lstSelected.Append(new int(*m_ImageBox.m_lstSelected[m]));
|
|
}
|
|
|
|
CString csCurTKName, csCurType;
|
|
HTREEITEM htree = NULL;
|
|
htree = m_treeCtrl.GetSelectedItem();
|
|
if(htree)
|
|
{
|
|
if(m_treeCtrl.m_bMerge)
|
|
{
|
|
m_treeCtrl.GetNodeAllPath(htree, csCurType);
|
|
m_ImageBox.SetTKWInfo(m_csCurTKWFile, csCurType);
|
|
}
|
|
else
|
|
{
|
|
m_treeCtrl.GetNodeAllPath(htree, csCurTKName, csCurType);
|
|
m_ImageBox.SetTKInfo(csCurTKName, csCurType);
|
|
}
|
|
}
|
|
if(bReservePage)
|
|
{
|
|
for(int n=0;n<lstSelected.Length();n++)
|
|
{
|
|
m_ImageBox.m_lstSelected.Append(new int(*lstSelected[n]));
|
|
}
|
|
}
|
|
if((iPage+1) > m_ImageBox.TotalPages())
|
|
iPage--;
|
|
if(bReservePage && iPage != m_ImageBox.CurPage() && iPage > -1)
|
|
m_ImageBox.GoPage(iPage);
|
|
else
|
|
m_ImageBox.SetupImage(TRUE);
|
|
|
|
InitVSBar();
|
|
ResetListData();
|
|
}
|
|
|
|
void CGJKWorkspace::ResetStateText()
|
|
{
|
|
CString csMsg, csRecord;
|
|
int len = m_ImageBox.m_lstSelected.Length();
|
|
if(len < 1)
|
|
csRecord = _T("无选中记录!");
|
|
for(int i=0;i<len;i++)
|
|
{
|
|
int sel = *m_ImageBox.m_lstSelected[i];
|
|
csRecord += m_ImageBox.m_lstBlk[sel]->csDrawing;
|
|
csRecord += _T(" ");
|
|
}
|
|
csMsg.Format(_T("当前选中记录号:%s 页号:%d/%d 总记录: %d"),
|
|
(const TCHAR *)csRecord, m_ImageBox.CurPage() + 1, m_ImageBox.TotalPages(),
|
|
m_ImageBox.GetTotalRecords());
|
|
SetDlgItemText(IDC_S_DESCRIPTION, csMsg);
|
|
}
|
|
|
|
BOOL CGJKWorkspace::IsLock()
|
|
{
|
|
if(m_bLock || m_treeCtrl.m_bLock || m_treeCtrl.m_bMerge)
|
|
return TRUE;
|
|
else
|
|
return FALSE;
|
|
}
|
|
|
|
//**********************************TOOLBAR 命令***********************************************
|
|
|
|
// 弹出布局菜单
|
|
void CGJKWorkspace::OnToolbarDropDown(NMHDR * pnmtb0, LRESULT *plr)
|
|
{
|
|
NMTOOLBAR* pnmtb= (NMTOOLBAR *)pnmtb0;
|
|
CTemporaryResourceOverride vTemp;//加载菜单
|
|
switch (pnmtb->iItem)
|
|
{
|
|
case ID_BLK_LAYOUT:
|
|
OnBlkLayout();
|
|
break;
|
|
|
|
//add by xlc on 070919
|
|
case ID_BLK_SORT:
|
|
OnBlkSort();
|
|
break;
|
|
|
|
default:
|
|
return;
|
|
}
|
|
}
|
|
|
|
//图块改名
|
|
void CGJKWorkspace::OnBlkRename()
|
|
{
|
|
m_listCtrl.SetFocus();
|
|
if(m_ImageBox.m_lstSelected.Length() < 1)
|
|
{
|
|
AfxMessageBox(_T("请选择一构件!"));
|
|
return;
|
|
}
|
|
ASSERT(m_ImageBox.m_nIndex>=0);
|
|
|
|
//modify by xlc on 070917
|
|
//m_bEditLabel = TRUE;
|
|
//m_listCtrl.EditLabel(m_ImageBox.m_nIndex);
|
|
if(m_ImageBox.m_lstSelected.Length() == 1)
|
|
{
|
|
m_bEditLabel = TRUE;
|
|
m_listCtrl.EditLabel(m_ImageBox.m_nIndex);
|
|
}
|
|
else
|
|
{
|
|
CTemporaryResourceOverride res;
|
|
CRenameDlg dlg;
|
|
|
|
POSITION pos = m_listCtrl.GetFirstSelectedItemPosition();
|
|
int index = m_listCtrl.GetNextSelectedItem(pos);
|
|
CString name = m_ImageBox.m_lstBlk[index]->csItem;
|
|
dlg.m_strName = name;
|
|
|
|
if(dlg.DoModal() != IDOK)
|
|
return;
|
|
|
|
BOOL bCheck = dlg.m_bCheck; //是否有序号
|
|
name = dlg.m_strName; //名称
|
|
int nNum = dlg.m_nNum; //起始编号
|
|
|
|
int count = m_listCtrl.GetSelectedCount(); //修改项个数
|
|
CString csTKName = m_ImageBox.m_lstBlk[index]->csTKFile;
|
|
CString sKind, sDrawing, sText; //类别,名称
|
|
CodeBase db;
|
|
XDbfTable *pTable = db.Open(csTKName);
|
|
if(!pTable)
|
|
{
|
|
MessageBox(XString(_T("%s文件只读或损坏"), (const TCHAR *)csTKName));
|
|
return;
|
|
}
|
|
|
|
for(pTable->MoveFirst(); !pTable->IsEOF(); pTable->MoveNext())
|
|
{
|
|
if(count >= 1)
|
|
{
|
|
GET_FIELD(pTable, _T("drawing"), sDrawing);
|
|
|
|
int i=0;
|
|
pos = m_listCtrl.GetFirstSelectedItemPosition();
|
|
while(pos)
|
|
{
|
|
int sel = m_listCtrl.GetNextSelectedItem(pos);
|
|
sText = m_ImageBox.m_lstBlk[sel]->csDrawing;
|
|
|
|
if(sDrawing == sText)
|
|
{
|
|
CString strName = name;
|
|
if(bCheck)
|
|
{
|
|
strName.Format( _T("%s%d"),name,(nNum+i));
|
|
}
|
|
SET_FIELD(pTable, _T("item"), (const TCHAR *)strName);
|
|
m_ImageBox.m_lstBlk[sel]->csItem = strName;
|
|
m_listCtrl.SetItemText(sel,0,strName);
|
|
|
|
count --;
|
|
if(count == 0)
|
|
return;
|
|
break;
|
|
}
|
|
|
|
i++;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
//弹出排序菜单
|
|
void CGJKWorkspace::OnBlkSort()
|
|
{
|
|
//modify by xlc on 070919
|
|
/*m_ImageBox.m_bSort = !m_ImageBox.m_bSort;
|
|
m_ImageBox.SetSort();
|
|
InitVSBar();
|
|
ResetListData();
|
|
if(m_ImageBox.m_bSort)
|
|
SetDlgItemText(IDC_S_DESCRIPTION, _T("按排序构件名次序显示"));
|
|
else
|
|
SetDlgItemText(IDC_S_DESCRIPTZION, _T("按构件入库次序显示"));
|
|
*/
|
|
CWnd *pWnd = &m_ToolBar;
|
|
CMenu menu;
|
|
CMenu* pPopup;
|
|
|
|
CRect rc;
|
|
pWnd->SendMessage(TB_GETRECT, ID_BLK_SORT, (LPARAM)&rc);
|
|
pWnd->ClientToScreen(&rc);
|
|
{
|
|
CTemporaryResourceOverride vTemp;//加载菜单
|
|
menu.LoadMenu(IDR_MENU_SORT);
|
|
}
|
|
if(m_ImageBox.m_bSort)
|
|
{
|
|
menu.CheckMenuItem(ID_MENU_SSORT,MF_CHECKED);
|
|
}
|
|
else
|
|
{
|
|
menu.CheckMenuItem(ID_MENU_SSORT,MF_UNCHECKED);
|
|
}
|
|
pPopup = menu.GetSubMenu(0);
|
|
pPopup->TrackPopupMenu( TPM_LEFTALIGN | TPM_LEFTBUTTON | TPM_VERTICAL,
|
|
rc.left, rc.bottom, this, &rc);
|
|
}
|
|
|
|
//删除所有选中图块
|
|
void CGJKWorkspace::OnBlkDel()
|
|
{
|
|
int len = m_ImageBox.m_lstSelected.Length();
|
|
if(len < 1)
|
|
{
|
|
AfxMessageBox(_T("请选择一构件!"));
|
|
return;
|
|
}
|
|
if(MessageBox(_T("您是否真的确定要删除此构件(无法恢复)?"),_T("警告"),MB_OKCANCEL|MB_ICONQUESTION) != IDOK)
|
|
return;
|
|
|
|
for(int i=0;i<len;i++)
|
|
{
|
|
int sel = *m_ImageBox.m_lstSelected[i];
|
|
TKStruct &cur = *(m_ImageBox.m_lstBlk[sel]);
|
|
/*
|
|
DbfAccess db(cur.csTKFile, FLAG_DELETE, 1, 0);
|
|
db.keyFieldName[0] = strdup("drawing");
|
|
db.keyinfo[0]=strdup(_AS(cur.csDrawing));
|
|
if(DBFFUN(db))
|
|
return;
|
|
*/
|
|
NewDbfTool::DeleteRecordByTKStruct(cur.csTKFile, _T("drawing"), cur.csDrawing);
|
|
|
|
XString xsDwb(1024), xsDwb2d(1024), xsSlb(1024), xsJpb(1024);
|
|
if(m_treeCtrl.m_bIsJpgShow)
|
|
{
|
|
xsDwb << GetPathNameByAllName(cur.csTKFile) << GetFileNameByAllName(cur.csTKFile) << _T("_3d.DWB");
|
|
xsDwb2d << GetPathNameByAllName(cur.csTKFile) << GetFileNameByAllName(cur.csTKFile) << _T("_2d.DWB");
|
|
XDrawingLib dwb2d(xsDwb2d);
|
|
if(!(!dwb2d))
|
|
dwb2d.Remove(cur.csDrawing);
|
|
}
|
|
else
|
|
xsDwb << GetPathNameByAllName(cur.csTKFile) << GetFileNameByAllName(cur.csTKFile) << _T(".DWB");
|
|
|
|
xsSlb << GetPathNameByAllName(cur.csTKFile) << GetFileNameByAllName(cur.csTKFile) << _T(".SLB");
|
|
xsJpb << GetPathNameByAllName(cur.csTKFile) << GetFileNameByAllName(cur.csTKFile) << _T(".JPB");
|
|
XDrawingLib dwb(xsDwb);
|
|
if(!(!dwb))
|
|
{
|
|
dwb.Remove(cur.csDrawing);
|
|
}
|
|
if(m_treeCtrl.m_bIsJpgShow)
|
|
{
|
|
XJpegLib jpb(xsJpb);
|
|
if(!(!jpb)) jpb.Remove(cur.csDrawing);
|
|
}
|
|
else
|
|
{
|
|
XSlideLib slb(xsSlb);
|
|
if(!(!slb)) slb.Remove(cur.csDrawing);
|
|
}
|
|
}
|
|
m_ImageBox.m_lstSelected.Reset();
|
|
ResetImage(TRUE);
|
|
if (m_ImageBox.GetTotalRecords() > 0)
|
|
{
|
|
m_ImageBox.m_lstSelected.Append(new int(0));
|
|
m_ImageBox.SelectIndex(0);
|
|
len = m_ImageBox.m_lstSelected.Length();
|
|
for(i=0;i<len;i++)
|
|
{
|
|
int sel = *m_ImageBox.m_lstSelected[i];
|
|
m_listCtrl.SetItemState(sel, LVIS_SELECTED, LVIS_SELECTED);
|
|
}
|
|
}
|
|
SetDlgItemText(IDC_S_DESCRIPTION, _T("删除所有选中构件"));
|
|
}
|
|
|
|
|
|
//删除当前类别及图块
|
|
void CGJKWorkspace::OnBlkDelkind()
|
|
{
|
|
if(IsLock()) return;
|
|
if(m_treeCtrl.DelCurKind())
|
|
{
|
|
ResetImage();
|
|
SetDlgItemText(IDC_S_DESCRIPTION, _T("删除选中类别下所有构件"));
|
|
}
|
|
}
|
|
|
|
// 弹出布局菜单
|
|
void CGJKWorkspace::OnBlkLayout()
|
|
{
|
|
CWnd *pWnd = &m_ToolBar;
|
|
CMenu menu;
|
|
CMenu* pPopup, *pPopupLayout;
|
|
CMenu popupMenu;
|
|
CRect rc;
|
|
pWnd->SendMessage(TB_GETRECT, ID_BLK_LAYOUT, (LPARAM)&rc);
|
|
pWnd->ClientToScreen(&rc);
|
|
{
|
|
CTemporaryResourceOverride vTemp;//加载菜单
|
|
menu.LoadMenu(IDR_MENU_IMAGELAYOUT1);
|
|
}
|
|
pPopup = menu.GetSubMenu(0);
|
|
pPopupLayout = pPopup->GetSubMenu(8);
|
|
pPopupLayout->TrackPopupMenu( TPM_LEFTALIGN | TPM_LEFTBUTTON | TPM_VERTICAL,
|
|
rc.left, rc.bottom, this, &rc);
|
|
}
|
|
|
|
// 下一页
|
|
void CGJKWorkspace::OnBlkPagedown()
|
|
{
|
|
m_ImageBox.GoPage(m_ImageBox.CurPage() + 1);
|
|
UINT nEndPos = m_vsBar.GetScrollPos();
|
|
nEndPos += m_nPageRow;
|
|
m_vsBar.SetScrollPos(nEndPos);
|
|
ResetStateText();
|
|
}
|
|
|
|
// 上一页
|
|
void CGJKWorkspace::OnBlkPageup()
|
|
{
|
|
m_ImageBox.GoPage(m_ImageBox.CurPage() - 1);
|
|
UINT nEndPos = m_vsBar.GetScrollPos();
|
|
nEndPos -= m_nPageRow;
|
|
m_vsBar.SetScrollPos(nEndPos);
|
|
ResetStateText();
|
|
}
|
|
|
|
// 新图入库
|
|
void CGJKWorkspace::OnBlkNewdwg()
|
|
{
|
|
if(g_nArchType==4)
|
|
{
|
|
AfxMessageBox(_T("学习版不支持,欢迎购买正版!"));
|
|
return;
|
|
}
|
|
if(IsLock())
|
|
return;
|
|
HTREEITEM htree = m_treeCtrl.GetSelectedItem();
|
|
CString csCurTKName, csCurType;
|
|
m_treeCtrl.GetNodeAllPath(htree, csCurTKName, csCurType);
|
|
if(csCurTKName == _T(""))
|
|
{
|
|
AfxMessageBox(_T("您还没有选择图库tk文件,无法入库!"));
|
|
return;
|
|
}
|
|
XString xsDwbPath(1024);
|
|
if(!m_ImageBox.m_bIsJpgShow)
|
|
xsDwbPath << GetPathNameByAllName(csCurTKName) <<
|
|
GetFileNameByAllName(csCurTKName) << _T(".DWB");
|
|
|
|
TCHAR xsRet[1024]=_T("");
|
|
if(GetNextDrawing(csCurTKName, xsRet)!=RTNORM)
|
|
{
|
|
return;
|
|
}
|
|
HideDialog(TRUE);
|
|
int num = m_ImageBox.CurImage(),num2 = 0;
|
|
if(AddImage2Dwb(csCurTKName, CString((const TCHAR*)xsRet)) == RTNORM)
|
|
{
|
|
CodeBase db;
|
|
XDbfTable *pTable = db.Open(csCurTKName);
|
|
if(!pTable)
|
|
{
|
|
AfxMessageBox(_T("TK文件只读或损坏!"));
|
|
return;
|
|
}
|
|
for (pTable->MoveFirst();!pTable->IsEOF();pTable->MoveNext())
|
|
{
|
|
CString sTemp;
|
|
GET_FIELD(pTable,_T("kind"),sTemp);
|
|
if (sTemp == csCurType)
|
|
num2++;
|
|
}
|
|
pTable->AppendBegin();
|
|
SET_FIELD(pTable, _T("kind"), (const TCHAR*)csCurType);
|
|
|
|
// modify bt xlc on 080819 新入库的图块名为XX*YY格式
|
|
double width(0),high(0);
|
|
XString xsBlockName(1024);
|
|
xsBlockName << GetPathNameByAllName(csCurTKName) << GetFileNameByAllName(csCurTKName) << _T("(")<<xsRet<<_T(")");
|
|
if(GetBlockSize(xsBlockName, width, high))
|
|
{
|
|
SET_FIELD(pTable, _T("Item"), XString(_T("%dX%d"),(int)width,(int)high));
|
|
}
|
|
else
|
|
|
|
{
|
|
SET_FIELD(pTable, _T("Item"), _T("新构件"));
|
|
}
|
|
|
|
SET_FIELD(pTable, _T("Drawing"), xsRet);
|
|
pTable->AppendEnd();
|
|
}
|
|
HideDialog(FALSE);
|
|
ResetImage();
|
|
if (num2 > 0)
|
|
{
|
|
if (m_treeCtrl.GetParentItem(m_treeCtrl.GetSelectedItem()) == m_treeCtrl.GetRootItem())
|
|
{
|
|
m_ImageBox.m_lstSelected.Append(new int(num2));
|
|
m_ImageBox.SelectIndex(num2);
|
|
}
|
|
else
|
|
{
|
|
m_ImageBox.m_lstSelected.Append(new int(num2 - 1));
|
|
m_ImageBox.SelectIndex(num2 - 1);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
m_ImageBox.m_lstSelected.Append(new int(num));
|
|
m_ImageBox.SelectIndex(num);
|
|
}
|
|
int len = m_ImageBox.m_lstSelected.Length();
|
|
for(int i=0;i<len;i++)
|
|
{
|
|
int sel = *m_ImageBox.m_lstSelected[i];
|
|
m_listCtrl.SetItemState(sel, LVIS_SELECTED, LVIS_SELECTED);
|
|
}
|
|
SetDlgItemText(IDC_S_DESCRIPTION, _T("新构件入库完毕!"));
|
|
}
|
|
|
|
// add by xlc on 080818
|
|
// 获得块尺寸
|
|
BOOL CGJKWorkspace::GetBlockSize(XString sBlockName, double &width, double &high)
|
|
{
|
|
if(sBlockName==_T(""))
|
|
return FALSE;
|
|
|
|
AcDbObjectId BlockId;
|
|
XString sBlock(1024);
|
|
|
|
|
|
if (LoadDwbBlock(sBlockName, sBlock)!=RTNORM)
|
|
return FALSE;
|
|
|
|
BlockId = InitBlock(sBlock,NULL);
|
|
|
|
AcDbExtents ext;
|
|
AcDbBlockReference blockRef;
|
|
blockRef.setBlockTableRecord(BlockId);
|
|
blockRef.geomExtentsBestFit(ext);
|
|
|
|
AcGePoint3d maxPt, minPt;
|
|
maxPt = ext.maxPoint();
|
|
minPt = ext.minPoint();
|
|
width = maxPt.x - minPt.x;
|
|
high = maxPt.y - minPt.y;
|
|
return TRUE;
|
|
}
|
|
|
|
int CGJKWorkspace::RebuildSld(const TCHAR* szTKName)
|
|
{
|
|
CString csTKName = szTKName;
|
|
XString xsDrawing = m_ImageBox.m_lstBlk[*m_ImageBox.m_lstSelected[0]]->csDrawing;
|
|
|
|
XString xsFullSld(1024), xsFullDwg(1024);
|
|
BOOL bHide = FALSE;
|
|
TCHAR dwgPrefix[1024]=_T("");
|
|
GetTempPath(1023, dwgPrefix);
|
|
if(dwgPrefix[_tcslen(dwgPrefix)-1]!=_T('\\'))
|
|
_tcscat(dwgPrefix, _T("\\"));
|
|
_tcscat(dwgPrefix, _T("SRTEMP\\"));
|
|
MakeDir(dwgPrefix);
|
|
{
|
|
xsFullSld << dwgPrefix << xsDrawing << _T(".sld");
|
|
xsFullDwg << dwgPrefix << xsDrawing << _T(".dwg");
|
|
|
|
while(1)
|
|
{
|
|
const TCHAR *szPrompt=_T("\n制作幻灯片(请用zoom调整合适)或 [消隐(H)/不制作返回(X)]<制作>:");
|
|
XString sKeyword;
|
|
int nRet = 0;
|
|
INITGET_BEG(0, _T("H X"));
|
|
nRet = ads_getkword(szPrompt, sKeyword);
|
|
INITGET_END();
|
|
if(nRet == RTNONE)
|
|
break;
|
|
if(sKeyword[0]==_T('H'))
|
|
{
|
|
bHide = TRUE;
|
|
}
|
|
else
|
|
{
|
|
return RTERROR;
|
|
}
|
|
}
|
|
if(bHide)
|
|
{
|
|
SHads_command(RTSTR, _T("HIDE"), RTNONE);
|
|
SHads_command(RTSTR, _T("MSLIDE"), RTSTR, (TCHAR *)xsFullSld, RTNONE);
|
|
SHads_command(RTSTR, _T("REGEN"), RTNONE);
|
|
}
|
|
else
|
|
{
|
|
SHads_command(RTSTR, _T("MSLIDE"), RTSTR, (TCHAR *)xsFullSld, RTNONE);
|
|
}
|
|
|
|
XString xsSlbFile(1024);
|
|
xsSlbFile << GetPathNameByAllName(csTKName) << GetFileNameByAllName(csTKName) << _T(".SLB");
|
|
XSlideLib slbMan(xsSlbFile);
|
|
if(!slbMan) return RTERROR;
|
|
slbMan.Append(xsFullSld);
|
|
_tremove(xsFullSld);
|
|
}
|
|
return RTNONE;
|
|
}
|
|
|
|
int CGJKWorkspace::AddImage2DwbForBlkRebuild(const TCHAR* szTKName,const TCHAR* szDrawing,BOOL bIsRebuild)
|
|
{
|
|
|
|
CString csTKName, csDrawing;
|
|
csTKName = szTKName;
|
|
csDrawing = szDrawing;
|
|
|
|
PickSet ss(SS_FREE);
|
|
Entity ent;
|
|
CString sName = GetFileNameByAllName(szTKName);
|
|
int rc;
|
|
CTkwFile tkw(m_csCurTKWFile);
|
|
if (sName == _T("Other"))
|
|
{
|
|
rc = SelectEntities(_T("\n选择构成构件的图元<只重制幻灯片>:"), ss,RBList(RTDXF0, _T("*"), NULL));
|
|
if(rc != RTNORM && !bIsRebuild)
|
|
return RTERROR;
|
|
else if(rc != RTNORM && bIsRebuild)
|
|
{
|
|
return RebuildSld(csTKName);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
while(1)
|
|
{
|
|
rc = SelectEntity(_T("\n选择构成构件的图元<只重制幻灯片>:"), ent, RBList(RTDXF0, _T("*"),NULL));
|
|
if (rc == RTCAN)
|
|
return RTCAN;
|
|
else if(rc == RTNORM && ent.name[0] && ent.name[1])
|
|
{
|
|
if (ent.MatchBase(RBList(RTDXF0, LPCTSTR(tkw.m_csDxfCode),NULL)))
|
|
{
|
|
ss += ent;
|
|
break;
|
|
}
|
|
else
|
|
{
|
|
acutPrintf(_T("已过滤"));
|
|
continue;
|
|
}
|
|
}
|
|
if(rc != RTNORM && !bIsRebuild)
|
|
return RTERROR;
|
|
else if(rc != RTNORM && bIsRebuild)
|
|
{
|
|
return RebuildSld(csTKName);
|
|
}
|
|
}
|
|
}
|
|
|
|
int nRetCode=RTERROR;
|
|
XPoint center, basePt;
|
|
ads_real sx, sy, sz;
|
|
ss.GetExtend(center, &sx, &sy, &sz);
|
|
center.z -= sz/2.0; //基点在下方
|
|
adsout << _T("\n图块基点<") << center << _T(">:");
|
|
rc=ads_getpoint(Wcs2Ucs(center), _T(""), basePt);
|
|
if(rc==RTNONE)
|
|
{
|
|
basePt=Wcs2Ucs(center);
|
|
rc=RTNORM;
|
|
}
|
|
if(rc==RTNORM)
|
|
{
|
|
|
|
PickSet ssAll(SS_FREE);
|
|
ssAll.Get(_T("X"));
|
|
ssAll -= ss;
|
|
|
|
//add by xlc on 080812 解决对局部隐藏对象的影响
|
|
PickSet ssHide(SS_FREE);
|
|
GetPickSetByGroup(_T("_TCH_HIDE_GROUP"), ssHide);
|
|
ssAll -= ssHide;
|
|
|
|
MakeVisible(ssAll, false);
|
|
XString xsFullSld(1024), xsFullDwg(1024);
|
|
BOOL bHide = FALSE;
|
|
BOOL bDelete = TRUE;
|
|
TCHAR dwgPrefix[1024]=_T("");
|
|
GetTempPath(1023, dwgPrefix);
|
|
if(dwgPrefix[_tcslen(dwgPrefix)-1]!=_T('\\'))
|
|
_tcscat(dwgPrefix, _T("\\"));
|
|
_tcscat(dwgPrefix, _T("SRTEMP\\"));
|
|
MakeDir(dwgPrefix);
|
|
xsFullSld << dwgPrefix << csDrawing << _T(".sld");
|
|
xsFullDwg << dwgPrefix << csDrawing << _T(".dwg");
|
|
while(1)
|
|
{
|
|
const TCHAR *szPrompt=_T("\n制作幻灯片(请用zoom调整合适)或 [消隐(H)/不制作(N)/返回(X)]<制作>:");
|
|
XString sKeyword;
|
|
int nRet = 0;
|
|
INITGET_BEG(0, _T("H X N"));
|
|
nRet = ads_getkword(szPrompt, sKeyword);
|
|
INITGET_END();
|
|
if(nRet == RTNONE)
|
|
break;
|
|
if(sKeyword[0]==_T('H'))
|
|
{
|
|
bHide = TRUE;
|
|
}
|
|
else if(sKeyword[0]==_T('N'))
|
|
{
|
|
bDelete = FALSE;
|
|
break;
|
|
}
|
|
else
|
|
{
|
|
MakeVisible(ssAll, true);
|
|
return RTERROR;
|
|
}
|
|
}
|
|
if(bHide)
|
|
{
|
|
XPushVar<int> splframe(_T("SPLFRAME"), 0);
|
|
SHads_command(RTSTR, _T("HIDE"), RTNONE);
|
|
SHads_command(RTSTR, _T("MSLIDE"), RTSTR, (TCHAR *)xsFullSld, RTNONE);
|
|
SHads_command(RTSTR, _T("REGEN"), RTNONE);
|
|
}
|
|
else
|
|
{
|
|
SHads_command(RTSTR, _T("MSLIDE"), RTSTR, (TCHAR *)xsFullSld, RTNONE);
|
|
}
|
|
XString xsDwbPath(1024);
|
|
if(!m_ImageBox.m_bIsJpgShow)
|
|
xsDwbPath << GetPathNameByAllName(szTKName) << GetFileNameByAllName(szTKName) << _T(".DWB");
|
|
else
|
|
xsDwbPath << GetPathNameByAllName(szTKName) << GetFileNameByAllName(szTKName) << _T("_3d.DWB");
|
|
{
|
|
XDrawingLib dwb(xsDwbPath);
|
|
if(!(!dwb)) dwb.Remove(szDrawing);
|
|
if (bDelete)
|
|
{
|
|
CString sSlb((const TCHAR*)xsDwbPath);
|
|
sSlb.Replace(_T(".DWB"),_T(".SLB"));
|
|
XSlideLib slb(sSlb);
|
|
if(!(!slb)) slb.Remove(szDrawing);
|
|
}
|
|
}
|
|
if (bDelete)
|
|
{
|
|
XString xsSlbFile(1024);
|
|
xsSlbFile << GetPathNameByAllName(csTKName) << GetFileNameByAllName(csTKName) << _T(".SLB");
|
|
XSlideLib slbMan(xsSlbFile);
|
|
if(!slbMan)
|
|
{
|
|
MakeVisible(ssAll, true);
|
|
return RTERROR;
|
|
}
|
|
slbMan.Append(xsFullSld);
|
|
_tremove(xsFullSld);
|
|
}
|
|
if(!ss)
|
|
{
|
|
MakeVisible(ssAll, true);
|
|
return RTERROR;
|
|
}
|
|
|
|
if(arxWBlock(ss, xsFullDwg, Ucs2Wcs(basePt)))
|
|
{
|
|
XString xsDwbFile(1024);
|
|
xsDwbFile << GetPathNameByAllName(csTKName) << GetFileNameByAllName(csTKName) << _T(".DWB");
|
|
XDrawingLib dwbMan(xsDwbFile);
|
|
if(!dwbMan){
|
|
}
|
|
else
|
|
{
|
|
dwbMan.Append(xsFullDwg);
|
|
nRetCode=RTNORM;
|
|
}
|
|
_tremove(xsFullDwg);
|
|
}
|
|
MakeVisible(ssAll, true);
|
|
}
|
|
return RTNORM;
|
|
}
|
|
void CGJKWorkspace::OnBlkRebuild()
|
|
{
|
|
if(IsLock())
|
|
return;
|
|
if(m_ImageBox.m_lstSelected.Length() != 1)
|
|
{
|
|
MessageBox(_T("请选中某一构件,再进行重新制作!"));
|
|
return;
|
|
}
|
|
int num = m_ImageBox.CurImage();
|
|
|
|
//add by xlc on 090514 点击类型新图入库ESC退出后重置时崩溃
|
|
if(num<0)
|
|
{
|
|
MessageBox(_T("请选中某一构件,再进行重新制作!"));
|
|
return;
|
|
}
|
|
|
|
CString csCurDrawing = m_ImageBox.m_lstBlk[*m_ImageBox.m_lstSelected[0]]->csDrawing;
|
|
HTREEITEM htree = m_treeCtrl.GetSelectedItem();
|
|
CString csCurTKName, csCurType;
|
|
m_treeCtrl.GetNodeAllPath(htree, csCurTKName, csCurType);
|
|
|
|
HideDialog(TRUE);
|
|
AddImage2DwbForBlkRebuild(csCurTKName, LPCTSTR(csCurDrawing), TRUE);
|
|
HideDialog(FALSE);
|
|
ResetImage();
|
|
m_ImageBox.m_lstSelected.Append(new int(num));
|
|
m_ImageBox.SelectIndex(num);
|
|
int len = m_ImageBox.m_lstSelected.Length();
|
|
for(int i=0;i<len;i++)
|
|
{
|
|
int sel = *m_ImageBox.m_lstSelected[i];
|
|
m_listCtrl.SetItemState(sel, LVIS_SELECTED, LVIS_SELECTED);
|
|
}
|
|
SetDlgItemText(IDC_S_DESCRIPTION, _T("重制构件完毕!"));
|
|
}
|
|
|
|
/////////////////////////////////// TOOLBAR 命令结束 ///////////////////////////////
|
|
|
|
//******************************* 右键菜单命令 **********************************************
|
|
|
|
void CGJKWorkspace::OnTkPopupRenamekind() //类别重命名
|
|
{
|
|
if(IsLock()) return;
|
|
HTREEITEM hTreeItem = NULL;
|
|
hTreeItem = m_treeCtrl.GetSelectedItem();
|
|
m_treeCtrl.SetFocus();
|
|
if(hTreeItem && hTreeItem != m_treeCtrl.GetRootItem());
|
|
{
|
|
m_bEditLabel = TRUE;
|
|
m_treeCtrl.EditLabel(hTreeItem);
|
|
}
|
|
}
|
|
|
|
void CGJKWorkspace::OnTkPopupNew() //新建类别
|
|
{
|
|
if(IsLock()) return;
|
|
HTREEITEM hItem = m_treeCtrl.GetSelectedItem();
|
|
HTREEITEM hSubItem = NULL;
|
|
if(hItem == NULL)
|
|
return;
|
|
|
|
CString csCurTKName, csCurType;
|
|
m_treeCtrl.GetNodeAllPath(hItem, csCurTKName, csCurType);
|
|
|
|
CodeBase db;
|
|
XDbfTable *pTable = db.Open(csCurTKName);
|
|
if(!pTable)
|
|
{
|
|
AfxMessageBox(_T("TK文件只读或损坏!"));
|
|
return;
|
|
}
|
|
hSubItem = m_treeCtrl.InsertItem(_T("新类别"), 1, 2, hItem );
|
|
m_treeCtrl.SelectItem(hSubItem);
|
|
if(csCurType == _T(""))
|
|
csCurType = _T("新类别");
|
|
else
|
|
csCurType = csCurType + _T("\\新类别");
|
|
pTable->AppendBegin();
|
|
SET_FIELD(pTable, _T("kind"), (const TCHAR*)csCurType);
|
|
pTable->AppendEnd();
|
|
m_treeCtrl.SetFocus();
|
|
m_bEditLabel = TRUE;
|
|
m_treeCtrl.EditLabel(hSubItem);
|
|
SetDlgItemText(IDC_S_DESCRIPTION, _T("新建类别"));
|
|
}
|
|
|
|
void CGJKWorkspace::OnTkPopupDel() //删除类别
|
|
{
|
|
OnBlkDelkind();
|
|
}
|
|
|
|
/////////////////////////////////// 右键菜单 命令结束 //////////////////////////////////////////////////
|
|
|
|
void CGJKWorkspace::OnOK()
|
|
{
|
|
if(m_nOpenMode == 0 || m_nOpenMode == 2)
|
|
{
|
|
SaveStatus();
|
|
if(m_ImageBox.m_lstSelected.Length() != 1)
|
|
{
|
|
AfxMessageBox(_T("请选择一构件!"));
|
|
return;
|
|
}
|
|
int sel = *m_ImageBox.m_lstSelected[0];
|
|
TKStruct *cur = m_ImageBox.m_lstBlk[sel];
|
|
HideDialog(TRUE);
|
|
BOOL bRet = InsertBlock(cur->csTKFile, cur->csDrawing);
|
|
if(bRet)
|
|
{
|
|
HideDialog(FALSE);
|
|
return;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if(m_ImageBox.m_lstSelected.Length() == 1)
|
|
{
|
|
//modify by xlc on 080602
|
|
SaveStatus();
|
|
|
|
int sel = *m_ImageBox.m_lstSelected[0];
|
|
TKStruct &cur = *(m_ImageBox.m_lstBlk[sel]);
|
|
m_csLastTKName = cur.csTKFile;
|
|
TCHAR szDrive[1024]=_T(""), szDir[1024]=_T(""),
|
|
szFile[1024]=_T(""), szExt[1024]=_T("");
|
|
_tsplitpath(m_csLastTKName, szDrive, szDir, szFile, szExt);
|
|
m_csRet = CString(szFile) + _T("(") + cur.csDrawing+ _T(")");
|
|
}
|
|
}
|
|
CAcUiDialog::OnOK();
|
|
}
|
|
|
|
void CGJKWorkspace::OnBlkReplace()
|
|
{
|
|
if(m_ImageBox.m_lstSelected.Length() != 1)
|
|
{
|
|
AfxMessageBox(_T("请选择某一构件!"));
|
|
return;
|
|
}
|
|
SaveStatus();
|
|
CAcUiDialog::OnOK();
|
|
int sel = *m_ImageBox.m_lstSelected[0];
|
|
TKStruct *cur = m_ImageBox.m_lstBlk[sel];
|
|
//modified by whl
|
|
ReplaceBlk(cur->csTKFile, cur->csDrawing);
|
|
}
|
|
|
|
AcDbObjectId GetBlkRecordIdByName(const TCHAR* szBlkName);
|
|
|
|
//TARCH_IMPEXP AcDbObjectId MakeBlockInsert(const TCHAR *pszBlock, XPoint ptInsert,
|
|
// double sx, double sy, double sz, double rot);
|
|
//add by cwk
|
|
int LoadDwbEntity(const TCHAR *sDwbFile,const TCHAR *csDrawing,TCHAR *sBlockName,
|
|
AcDbVoidPtrArray &allEntites)
|
|
{
|
|
if(LoadDwbBlock(sDwbFile, csDrawing, sBlockName) == RTNORM)
|
|
{
|
|
AcDbDatabase *pDatabase = acdbHostApplicationServices()->workingDatabase();
|
|
AcDbBlockTable *pBlkTable = NULL;
|
|
pDatabase->getBlockTable(pBlkTable,AcDb::kForRead);
|
|
if(pBlkTable!=NULL)
|
|
{
|
|
AcDbBlockTableRecord *pBlkTableRec = NULL;
|
|
pBlkTable->getAt(sBlockName,pBlkTableRec,AcDb::kForRead);
|
|
pBlkTable->close();
|
|
|
|
if(pBlkTableRec!=NULL)
|
|
{
|
|
AcDbBlockTableRecordIterator *pBlkTableRecIte = NULL;
|
|
pBlkTableRec->newIterator(pBlkTableRecIte);
|
|
|
|
if(pBlkTableRecIte!=NULL)
|
|
{
|
|
for (pBlkTableRecIte->start();!pBlkTableRecIte->done();pBlkTableRecIte->step())
|
|
{
|
|
AcDbEntity *pEnt = NULL;
|
|
pBlkTableRecIte->getEntity(pEnt,AcDb::kForRead);
|
|
if(pEnt != NULL)
|
|
{
|
|
AcDbObject *pNew=(AcDbObject*)pEnt->clone();
|
|
pEnt->close();
|
|
|
|
allEntites.append(pNew);
|
|
TEntityBase *pTEnt=TEntityBase::Cast(pNew);
|
|
if(pTEnt!=NULL)
|
|
pTEnt->SetPScale(DocGetPScale());//设为当前比例,071024
|
|
}
|
|
}
|
|
delete pBlkTableRecIte;
|
|
}
|
|
|
|
//删除块记录
|
|
if (pBlkTableRec->upgradeOpen() == Acad::eOk)
|
|
pBlkTableRec->erase();
|
|
|
|
pBlkTableRec->close();
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
return RTERROR;
|
|
}
|
|
return RTNORM;
|
|
}
|
|
//extern GEOAPI int DragPickSet(PickSet &ss, XPoint &ptBase);
|
|
extern TARCH_IMPEXP int DragMovePickSet(PickSet &ss, const char *pszPrompt, const XPoint &ptBase, XPoint &ptFinal);
|
|
|
|
BOOL CGJKWorkspace::InsertBlock(const TCHAR* szTKName, const TCHAR* szDrawing)
|
|
{
|
|
CString csTKName, csDrawing;
|
|
csTKName = szTKName;
|
|
csDrawing = szDrawing;
|
|
|
|
XString xsDwbPath(1024), blkName(1024), xsDwbPath2d, blkName2d(1024);
|
|
AcDbObjectId id2d(NULL), id3d(NULL);
|
|
TCHAR drive[1024]=_T(""), dir[1024]=_T(""), file[1024], ext[1024];
|
|
_tsplitpath(csTKName, drive, dir, file, ext);
|
|
if(m_treeCtrl.m_bIsJpgShow)
|
|
{
|
|
_stprintf(blkName, _T("$%s_3d$%s"), file, (const TCHAR *)csDrawing);
|
|
xsDwbPath << GetPathNameByAllName(csTKName) << GetFileNameByAllName(csTKName) << _T("_3d.DWB");
|
|
xsDwbPath2d << GetPathNameByAllName(csTKName) << GetFileNameByAllName(csTKName) << _T("_2d.DWB");
|
|
if(LoadDwbBlock(xsDwbPath2d, csDrawing, blkName2d)!=RTNORM)//如果不存在图块,直接返回
|
|
{
|
|
ads_printf(_T("\n内部错误:无法找到并提取构件%s!"), blkName2d);
|
|
return FALSE;
|
|
}
|
|
id2d = GetBlkRecordIdByName(blkName2d);
|
|
}
|
|
else
|
|
{
|
|
_stprintf(blkName, _T("$%s$%s"), file, (const TCHAR *)csDrawing);
|
|
xsDwbPath << GetPathNameByAllName(csTKName) << GetFileNameByAllName(csTKName) << _T(".DWB");
|
|
}
|
|
AcDbVoidPtrArray allEntites;
|
|
if(!XSymbolTable(_T("BLOCK"), blkName))
|
|
{
|
|
LAB:
|
|
if(LoadDwbEntity(xsDwbPath, LPCTSTR(csDrawing), blkName,allEntites) != RTNORM)
|
|
{
|
|
ads_printf(_T("\n内部错误:无法找到并提取构件%s!"),blkName);
|
|
return FALSE;
|
|
}
|
|
|
|
if(m_treeCtrl.m_bIsJpgShow)
|
|
{
|
|
id3d = GetBlkRecordIdByName(blkName);
|
|
// 把材质从图块移动到模型空间
|
|
#if ADS<17
|
|
MoveMaterial2MSpace(id3d);
|
|
#endif
|
|
OPENOBJ_BEGIN(id3d, AcDb::kForWrite, AcDbBlockTableRecord, pBlock);
|
|
if(pBlock){
|
|
AcDbHandle handle = id2d.handle();
|
|
TCHAR szHandle[17]=_T("");
|
|
handle.getIntoAsciiBuffer(szHandle);
|
|
resbuf *pXData = ads_buildlist(1001, TCHXD, 1005, szHandle, NULL);
|
|
if(!XSymbolTable(_T("APPID"), TCHXD))
|
|
ads_regapp(TCHXD);
|
|
pBlock->setXData(pXData);
|
|
ads_relrb(pXData);
|
|
}
|
|
OPENOBJ_END();
|
|
SHads_command(RTSTR, _T(".REDRAW"), RTNONE);
|
|
}
|
|
XDbBlockTableRec rec(blkName, AcDb::kForWrite);
|
|
if(!!rec)
|
|
{
|
|
XString sComments(1024); // tkw, tk, block
|
|
sComments << XPathParser(m_csCurTKWFile).m_sFileName << _T(",")
|
|
<< XPathParser(csTKName).m_sFileName << _T(",")
|
|
<< (const TCHAR *)csDrawing;
|
|
rec.m_pBlockTableRec->setComments(sComments);
|
|
}
|
|
}
|
|
|
|
int nInsFlag=IBF_MINSERT|IBF_ROT90|IBF_MIRLR|IBF_MIRUD|IBF_ALIGN
|
|
|IBF_FRAME|IBF_ROTATE|IBF_BASEPT|IBF_RESEL;
|
|
int nRet;
|
|
|
|
{
|
|
|
|
XPoint pt;
|
|
PickSet ss(SS_FREE);
|
|
ss.IncludeBegin();
|
|
for (int i = 0;i < allEntites.length();i++)
|
|
{
|
|
AcDbEntity *pEnt = (AcDbEntity*)(allEntites[i]);
|
|
AddToModelSpace(pEnt,Adesk::kTrue);
|
|
}
|
|
ss.IncludeEnd();
|
|
nRet = DragPickSet(ss,pt);
|
|
if (nRet == RTNORM)
|
|
{
|
|
ss.Redraw(1);
|
|
goto LAB;
|
|
}
|
|
else
|
|
ss.Erase();
|
|
}
|
|
|
|
return (nRet==IBF_RESEL)? TRUE : FALSE;
|
|
}
|
|
|
|
extern AcDbObjectId GetRepBlkId(const TCHAR* szTKName, const TCHAR* szDrawing, BOOL m_bIsJpgShow);
|
|
|
|
BOOL CGJKWorkspace::ReplaceBlk(const TCHAR* szTKName, const TCHAR* szDrawing)
|
|
{
|
|
CString csTKName, csDrawing;
|
|
csTKName = szTKName;
|
|
csDrawing = szDrawing;
|
|
TCHAR drive[1024]=_T(""), dir[1024]=_T(""), file[1024], ext[1024];
|
|
_tsplitpath(csTKName, drive, dir, file, ext);
|
|
XString xsDwbPath(1024), blkName(1024);
|
|
_stprintf(blkName, _T("$%s$%s"), file, (const TCHAR *)csDrawing);
|
|
xsDwbPath << GetPathNameByAllName(csTKName) << GetFileNameByAllName(csTKName) << _T(".DWB");
|
|
AcDbVoidPtrArray allEntites;
|
|
if(LoadDwbEntity(xsDwbPath, LPCTSTR(csDrawing), blkName,allEntites) != RTNORM)
|
|
{
|
|
ads_printf(_T("\n内部错误:无法找到并提取构件%s!"),blkName);
|
|
return FALSE;
|
|
}
|
|
CGJKReplaceOption dlg(acedGetAcadFrame());
|
|
const TCHAR *szFormat= _T("%s(%s)");
|
|
dlg.m_sSldFile <<GetPathNameByAllName(csTKName)
|
|
<< XString(szFormat, (const TCHAR *)GetFileNameByAllName(csTKName), (const TCHAR *)csDrawing);
|
|
{
|
|
CTemporaryResourceOverride vTemp1;
|
|
dlg.Create(dlg.IDD,acedGetAcadFrame());
|
|
}
|
|
dlg.ShowWindow(SW_SHOW);
|
|
acedGetAcadFrame()->SetFocus();
|
|
CTkwFile tkw(m_csCurTKWFile);
|
|
CString str = tkw.m_csDxfCode;
|
|
RBList mask(RTDXF0, LPCTSTR(str), NULL);
|
|
|
|
PickSet ss(SS_FREE);
|
|
adsout << _T("\n选择图中将要被替换的构件!");
|
|
int nRetCode=ss.Get(NULL, NULL, NULL, mask);
|
|
if(nRetCode==RTNORM)
|
|
{
|
|
if (dlg.m_bModify)
|
|
{
|
|
CString csTKName, csDrawing;
|
|
csTKName = dlg.m_sTKName;
|
|
csDrawing = dlg.m_sDrawing;
|
|
TCHAR drive[1024]=_T(""), dir[1024]=_T(""), file[1024], ext[1024];
|
|
_tsplitpath(csTKName, drive, dir, file, ext);
|
|
XString xsDwbPath, blkName(1024);
|
|
_stprintf(blkName, _T("$%s$%s"), file, (const TCHAR *)csDrawing);
|
|
xsDwbPath << GetPathNameByAllName(csTKName) << GetFileNameByAllName(csTKName) << _T(".DWB");
|
|
allEntites.removeSubArray(0,allEntites.length() -1);
|
|
if(LoadDwbEntity(xsDwbPath, LPCTSTR(csDrawing), blkName,allEntites) != RTNORM)
|
|
{
|
|
ads_printf(_T("\n内部错误:无法找到并提取构件%s!"),blkName);
|
|
return FALSE;
|
|
}
|
|
}
|
|
|
|
long lCount=ss.Length();
|
|
for(long j=0L; j<ss.Length(); j++)
|
|
{
|
|
Entity ent1 = ss[j];
|
|
AcDbEntity *pEnt = NULL;
|
|
if (allEntites.length() >= 1)
|
|
pEnt = (AcDbEntity*)(allEntites[0]);
|
|
XDbObject obj(ent1.name, AcDb::kForWrite);
|
|
AcDbEntity *pEnt2 = (AcDbEntity*)obj.m_pObject;
|
|
TEntityBase* pTchEnt = TEntityBase::Cast(pEnt);
|
|
TEntityBase* pTchEnt2 = TEntityBase::Cast(pEnt2);
|
|
|
|
if (pTchEnt != NULL && pTchEnt2 != NULL && pEnt->isA()==pEnt2->isA())
|
|
pTchEnt2->CopyPropertiesFrom(pEnt,256);
|
|
obj.Close();
|
|
}
|
|
}
|
|
dlg.DestroyWindow();
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
// add by xlc on 070906
|
|
HCURSOR CGJKWorkspace::OnQueryDragIcon()
|
|
{
|
|
return (HCURSOR) m_hIcon;
|
|
}
|
|
|
|
// add by xlc on 070906
|
|
void CGJKWorkspace::OnBegindragList(NMHDR* pNMHDR, LRESULT* pResult)
|
|
{
|
|
if(!m_ImageBox.m_bSort)
|
|
{
|
|
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
|
|
m_nDragIndex = pNMListView->iItem;
|
|
|
|
POINT pt;
|
|
int nOffset = 15;
|
|
if(m_listCtrl.GetSelectedCount() > 1)
|
|
pt.x = nOffset;
|
|
pt.y = nOffset;
|
|
|
|
TCHAR szLabel[1024];
|
|
LVITEM lviT;
|
|
|
|
ZeroMemory(&lviT, sizeof (LVITEM));
|
|
lviT.mask = LVIF_TEXT;
|
|
lviT.pszText = szLabel;
|
|
lviT.cchTextMax = 1023;
|
|
|
|
lvItem lvi;
|
|
lvi.plvi = &lviT;
|
|
lvi.plvi->mask = LVIF_TEXT;
|
|
lvi.plvi->pszText = szLabel;
|
|
lvi.plvi->cchTextMax = 1023;
|
|
|
|
int nCount = m_listCtrl.GetSelectedCount();
|
|
CStringArray strArry; //选中项不同名的的字符串数组
|
|
POSITION pos = m_listCtrl.GetFirstSelectedItemPosition();
|
|
if (pos != NULL)
|
|
{
|
|
CString strItem;
|
|
while (pos)
|
|
{
|
|
int nItem = m_listCtrl.GetNextSelectedItem(pos);
|
|
lvi.plvi->iItem = nItem;
|
|
m_listCtrl.GetItem (lvi.plvi);
|
|
strItem=lvi.plvi->pszText;
|
|
|
|
BOOL bFind = FALSE;
|
|
for(int j=0;j<strArry.GetSize();j++)
|
|
{
|
|
if(_tcsicmp(strArry[j],strItem) == 0)
|
|
{
|
|
bFind = TRUE;
|
|
break;
|
|
}
|
|
}
|
|
if(!bFind)
|
|
{
|
|
strArry.Add(strItem);
|
|
}
|
|
}
|
|
}
|
|
|
|
//选中列表中与选中项名字相同的项
|
|
for(int i = 0; i < m_listCtrl.GetItemCount();i++)
|
|
{
|
|
if(m_listCtrl.GetItemState(i,LVIS_SELECTED))
|
|
continue;
|
|
|
|
CString strItem;
|
|
lvi.plvi->iItem = i;
|
|
m_listCtrl.GetItem (lvi.plvi);
|
|
strItem=lvi.plvi->pszText;
|
|
|
|
for(int j=0;j<strArry.GetSize();j++)
|
|
{
|
|
if(_tcsicmp(strArry[j],strItem) == 0)
|
|
{
|
|
m_listCtrl.SetItemState(i,LVIS_SELECTED,LVIS_SELECTED);
|
|
break;
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
RECT rect;
|
|
m_listCtrl.GetWindowRect(&rect);
|
|
|
|
m_pDragImage = new CImageList;
|
|
m_pDragImage->Create(IDB_BITMAP_BOX,rect.right-rect.left,1,ILC_COLOR32);
|
|
ASSERT(m_pDragImage);
|
|
|
|
m_pDragImage->BeginDrag(0, CPoint(0, nOffset));
|
|
m_pDragImage->DragEnter(GetDesktopWindow(), pNMListView->ptAction);
|
|
|
|
m_bDragging = TRUE;
|
|
m_nDropIndex = -1;
|
|
m_pDragList = &m_listCtrl;
|
|
m_pDropWnd = &m_listCtrl;
|
|
|
|
SetCapture ();
|
|
}
|
|
*pResult = 0;
|
|
}
|
|
|
|
// add by xlc on 070906
|
|
void CGJKWorkspace::DropItemOnList(CListCtrl* pDragList, CListCtrl* pDropList)
|
|
{
|
|
if(pDragList == NULL|| pDropList==NULL)
|
|
return;
|
|
|
|
pDropList->SetItemState (m_nDropIndex, 0, LVIS_DROPHILITED);
|
|
|
|
TCHAR szLabel[1024];
|
|
LVITEM lviT;
|
|
LVITEM* plvitem;
|
|
|
|
ZeroMemory(&lviT, sizeof (LVITEM));
|
|
lviT.iItem = m_nDragIndex;
|
|
lviT.mask = LVIF_TEXT;
|
|
lviT.pszText = szLabel;
|
|
lviT.cchTextMax = 1023;
|
|
|
|
lvItem* pItem;
|
|
lvItem lvi;
|
|
lvi.plvi = &lviT;
|
|
lvi.plvi->iItem = m_nDragIndex;
|
|
lvi.plvi->mask = LVIF_TEXT;
|
|
lvi.plvi->pszText = szLabel;
|
|
lvi.plvi->cchTextMax = 1023;
|
|
|
|
if(pDragList->GetSelectedCount() == 1)
|
|
{
|
|
if (m_nDropIndex !=m_nDragIndex)
|
|
{
|
|
pDragList->GetItem (lvi.plvi); //拖拽项
|
|
lvi.sCol2 = pDragList->GetItemText(lvi.plvi->iItem, 1);
|
|
|
|
if(pDragList == pDropList)
|
|
{
|
|
pDragList->DeleteItem (m_nDragIndex);
|
|
if(m_nDragIndex < m_nDropIndex)
|
|
m_nDropIndex--;
|
|
}
|
|
|
|
//插入项
|
|
lvi.plvi->iItem = (m_nDropIndex == -1) ? pDropList->GetItemCount () : m_nDropIndex;
|
|
pDropList->InsertItem (lvi.plvi);
|
|
|
|
pDropList->SetItemState (lvi.plvi->iItem, LVIS_SELECTED, LVIS_SELECTED);
|
|
}
|
|
}
|
|
else //多行
|
|
{
|
|
CList<lvItem*, lvItem*> listItems;
|
|
POSITION listPos;
|
|
|
|
POSITION pos = pDragList->GetFirstSelectedItemPosition();
|
|
while(pos)
|
|
{
|
|
plvitem = new LVITEM;
|
|
ZeroMemory(plvitem, sizeof(LVITEM));
|
|
pItem = new lvItem;
|
|
|
|
pItem->plvi = plvitem;
|
|
pItem->plvi->iItem = m_nDragIndex;
|
|
pItem->plvi->mask = LVIF_TEXT;
|
|
pItem->plvi->pszText = new TCHAR[1024];
|
|
pItem->plvi->cchTextMax = 1023;
|
|
|
|
m_nDragIndex = pDragList->GetNextSelectedItem(pos);
|
|
|
|
pItem->plvi->iItem = m_nDragIndex;
|
|
pDragList->GetItem(pItem->plvi);
|
|
|
|
listItems.AddTail(pItem);
|
|
}
|
|
|
|
if(pDragList == pDropList)
|
|
{
|
|
pos = pDragList->GetFirstSelectedItemPosition();
|
|
while(pos)
|
|
{
|
|
pos = pDragList->GetFirstSelectedItemPosition();
|
|
m_nDragIndex = pDragList->GetNextSelectedItem(pos);
|
|
|
|
pDragList->DeleteItem(m_nDragIndex);
|
|
if(m_nDragIndex < m_nDropIndex)
|
|
m_nDropIndex--;
|
|
}
|
|
}
|
|
|
|
listPos = listItems.GetHeadPosition();
|
|
while(listPos)
|
|
{
|
|
pItem = listItems.GetNext(listPos);
|
|
|
|
m_nDropIndex = (m_nDropIndex == -1) ? pDropList->GetItemCount() : m_nDropIndex;
|
|
pItem->plvi->iItem = m_nDropIndex;
|
|
pDropList->InsertItem(pItem->plvi);
|
|
pDropList->SetItemState(pItem->plvi->iItem, LVIS_SELECTED, LVIS_SELECTED);
|
|
|
|
m_nDropIndex++;
|
|
}
|
|
}
|
|
|
|
AdjustImage(); //调整图片位置
|
|
}
|
|
|
|
// add by xlc on 070906
|
|
void CGJKWorkspace::AdjustImage()
|
|
{
|
|
//modify by xlc on 090413解决向后拖拽一行时
|
|
// if(m_nDropIndex == m_nDragIndex || m_nDragIndex == m_nDropIndex-1)
|
|
// return;
|
|
|
|
DList<TKStruct> lstOld;
|
|
for(int i = 0; i < m_ImageBox.m_lstBlk.Length(); i++)
|
|
{
|
|
lstOld.Append(new TKStruct(*m_ImageBox.m_lstBlk[i]));
|
|
}
|
|
|
|
TCHAR szLabel[1024];
|
|
LVITEM lviT;
|
|
|
|
ZeroMemory(&lviT, sizeof (LVITEM)); //allocate and clear memory space for LV_ITEM
|
|
lviT.mask = LVIF_TEXT;
|
|
lviT.pszText = szLabel;
|
|
lviT.cchTextMax = 1023;
|
|
|
|
lvItem lvi;
|
|
lvi.plvi = &lviT;
|
|
lvi.plvi->mask = LVIF_TEXT;
|
|
lvi.plvi->pszText = szLabel;
|
|
lvi.plvi->cchTextMax = 1023;
|
|
|
|
for(i = 0; i < m_listCtrl. GetItemCount( ); i++)
|
|
{
|
|
CString strItem;
|
|
lvi.plvi->iItem = i;
|
|
m_listCtrl.GetItem (lvi.plvi);
|
|
strItem=lvi.plvi->pszText;
|
|
for(int j=0;j<lstOld.Length();j++)
|
|
{
|
|
CString str=lstOld[j]->csItem;
|
|
if(_tcsicmp(strItem,lstOld[j]->csItem) == 0)
|
|
{
|
|
m_ImageBox.m_lstBlk.Replace(new TKStruct(*lstOld[j]),i);
|
|
lstOld.Remove(j);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (ModifyDatabaseFile())
|
|
{
|
|
ResetImage(TRUE);
|
|
}
|
|
}
|
|
|
|
//add by xlc on 070919
|
|
BOOL CGJKWorkspace::ModifyDatabaseFile()
|
|
{
|
|
//将改动写入数据库
|
|
CString sKind, sItem, sDrawing; //类别,名称,内部图名
|
|
CodeBase db;
|
|
db.read_only = 0;
|
|
XDbfTable *pTable = db.Open(m_ImageBox.m_lstBlk[0]->csTKFile);
|
|
if(!pTable)
|
|
return FALSE;
|
|
|
|
int i=0;
|
|
for(pTable->MoveFirst(); !pTable->IsEOF(); pTable->MoveNext())
|
|
{
|
|
GET_FIELD(pTable, _T("kind"), sKind);
|
|
GET_FIELD(pTable, _T("item"), sItem);
|
|
GET_FIELD(pTable, _T("drawing"), sDrawing);
|
|
|
|
if(i<m_ImageBox.m_lstBlk.Length())
|
|
{
|
|
if(sItem.IsEmpty() || sDrawing.IsEmpty())
|
|
continue;
|
|
|
|
if(_tcsicmp(sKind,m_ImageBox.m_lstBlk[i]->csKind) == 0)
|
|
{
|
|
SET_FIELD(pTable, _T("item"), (const TCHAR *)m_ImageBox.m_lstBlk[i]->csItem);
|
|
SET_FIELD(pTable, _T("drawing"), (const TCHAR *)m_ImageBox.m_lstBlk[i]->csDrawing);
|
|
|
|
i++;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
break;
|
|
}
|
|
}
|
|
db.read_only = 1;
|
|
|
|
return TRUE;
|
|
}
|
|
//-------------------------------------------------
|
|
//add by xlc on 080827
|
|
void CGJKWorkspace::OpenFileByMenu(CString csCommand)
|
|
{
|
|
CString csTKWFullName;
|
|
GetGjkwFileByMenu(csCommand, csTKWFullName);
|
|
if(!csTKWFullName.IsEmpty() && FindFile(csTKWFullName))
|
|
{
|
|
m_csCurTKWFile = csTKWFullName;
|
|
m_treeCtrl.SetDataSource(m_csCurTKWFile);
|
|
m_ImageBox.m_bIsJpgShow = m_treeCtrl.m_bIsJpgShow;
|
|
m_treeCtrl.SelectItem(m_treeCtrl.GetRootItem());
|
|
SetDlgItemText(IDC_S_DESCRIPTION, _T("打开tkw图库组文件"));
|
|
SaveStatus();
|
|
LoadStatus();
|
|
}
|
|
else if(!FindFile(csTKWFullName) && !csTKWFullName.IsEmpty())
|
|
MessageBox(_T("没有找到库文件!请确认安装是否完全。"));
|
|
}
|
|
|
|
void CGJKWorkspace::OnSelectOpeningLib()
|
|
{
|
|
m_ToolBar.m_pComboxCtrl->SetCurSel(0);
|
|
OpenFileByMenu(CString(_T("门窗")));
|
|
}
|
|
void CGJKWorkspace::OnSelectColLib()
|
|
{
|
|
m_ToolBar.m_pComboxCtrl->SetCurSel(1);
|
|
OpenFileByMenu(CString(_T("柱子")));
|
|
}
|
|
void CGJKWorkspace::OnSelectStairLib()
|
|
{
|
|
m_ToolBar.m_pComboxCtrl->SetCurSel(2);
|
|
OpenFileByMenu(CString(_T("楼梯")));
|
|
}
|
|
void CGJKWorkspace::OnSelectBalLib()
|
|
{
|
|
m_ToolBar.m_pComboxCtrl->SetCurSel(3);
|
|
OpenFileByMenu(CString(_T("阳台")));
|
|
}
|
|
void CGJKWorkspace::OnSelectStepLib()
|
|
{
|
|
m_ToolBar.m_pComboxCtrl->SetCurSel(4);
|
|
OpenFileByMenu(CString(_T("台阶")));
|
|
}
|
|
void CGJKWorkspace::OnSelectSheetLib()
|
|
{
|
|
m_ToolBar.m_pComboxCtrl->SetCurSel(5);
|
|
OpenFileByMenu(CString(_T("表格")));
|
|
}
|
|
void CGJKWorkspace::OnSelectOtherLib()
|
|
{
|
|
m_ToolBar.m_pComboxCtrl->SetCurSel(6);
|
|
OpenFileByMenu(CString(_T("其它")));
|
|
}
|
|
|
|
void CGJKWorkspace::AddDynMenu(BOOL bCreate//[in]是否创建
|
|
)
|
|
{
|
|
if(bCreate)
|
|
{
|
|
m_cMenu.CreatePopupMenu();
|
|
GetMenu()->InsertMenu(0,MF_BYPOSITION | MF_POPUP,(UINT_PTR)m_cMenu.m_hMenu,_T("图库"));
|
|
}
|
|
else
|
|
{
|
|
m_cMenu.DestroyMenu();
|
|
m_cMenu.CreatePopupMenu();
|
|
GetMenu()->ModifyMenu(0,MF_BYPOSITION | MF_POPUP,(UINT_PTR)m_cMenu.m_hMenu,_T("图库"));
|
|
|
|
}
|
|
|
|
int i, nLenArray;
|
|
UINT MenuID;
|
|
XStringList lstTkwItem;
|
|
|
|
MenuID = OpenMenuID;
|
|
GetTchgjkAllItem(lstTkwItem);
|
|
nLenArray = lstTkwItem.Length();
|
|
for(i=0;i<nLenArray;i++)
|
|
{
|
|
CString csTkwItem = (const TCHAR*)lstTkwItem[i];
|
|
if(csTkwItem == _T("#"))
|
|
m_cMenu.AppendMenu(MF_SEPARATOR);
|
|
else
|
|
m_cMenu.AppendMenu(MF_STRING, MenuID + i, csTkwItem);
|
|
}
|
|
}
|
|
|
|
//----------------------------------------------------
|