Files
gjm 164968b62e chore
把非utf8-bom编码的cpp/h文件改为 utf8 bom 编码, msvc识别utf8编码时,如果不是bom格式的,会使用当前cp_oem来解码.
2026-10-04 00:04:20 +08:00

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);
}
}
//----------------------------------------------------