995 lines
25 KiB
C++
995 lines
25 KiB
C++
// SlbManDlg.cpp : implementation file
|
|
//
|
|
|
|
#include "stdafx.h"
|
|
#include "SlbManDlg.h"
|
|
|
|
#ifdef _DEBUG
|
|
#define new DEBUG_NEW
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
//extern TARCH_IMPEXP int DragInsertBlock1(const TCHAR *szBlock, int nFlag, const AcGeScale3d &scales);
|
|
extern TARCH_IMPEXP int g_nRunMode;
|
|
const int g_nMaxRecentSlb = 6;
|
|
UINT MenuID = 8000;
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CSlbManDlg dialog
|
|
|
|
int ShowSlbMgr()
|
|
{
|
|
CSlbManDlg dlg(acedGetAcadFrame());
|
|
INT_PTR nRet;
|
|
{
|
|
CTemporaryResourceOverride vTmp;
|
|
nRet=dlg.DoModal();
|
|
}
|
|
if(nRet==IDOK)
|
|
dlg.DragInsert();
|
|
return RTNORM;
|
|
}
|
|
|
|
|
|
IMPLEMENT_DYNAMIC(CSlbManDlg, CTKImageDlg)
|
|
|
|
CSlbManDlg::CSlbManDlg(CWnd* pParent /*=NULL*/)
|
|
: CTKImageDlg(CSlbManDlg::IDD, pParent)
|
|
{
|
|
//{{AFX_DATA_INIT(CSlbManDlg)
|
|
// NOTE: the ClassWizard will add member initialization here
|
|
//}}AFX_DATA_INIT
|
|
m_hOldItem = 0;
|
|
m_bIsEndOpen = TRUE;
|
|
m_bCellIsDragging = FALSE;
|
|
}
|
|
|
|
|
|
void CSlbManDlg::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CTKImageDlg::DoDataExchange(pDX);
|
|
//{{AFX_DATA_MAP(CSlbManDlg)
|
|
// NOTE: the ClassWizard will add DDX and DDV calls here
|
|
//}}AFX_DATA_MAP
|
|
}
|
|
|
|
|
|
BEGIN_MESSAGE_MAP(CSlbManDlg, CTKImageDlg)
|
|
//{{AFX_MSG_MAP(CSlbManDlg)
|
|
ON_NOTIFY(LVN_ITEMCHANGED, IDC_TK_LIST, OnItemchangedTkList)
|
|
ON_WM_LBUTTONDOWN()
|
|
ON_COMMAND(ID_BLK_LAYOUT, OnBlkLayout)
|
|
ON_NOTIFY(TBN_DROPDOWN, IDR_SLBMAN, OnToolbarDropDown)
|
|
ON_COMMAND(ID_BLK_OPENLIB, OnBlkOpenlib)
|
|
ON_WM_CONTEXTMENU()
|
|
ON_COMMAND(ID_BLK_RENAME, OnBlkRename)
|
|
ON_NOTIFY(LVN_ENDLABELEDIT, IDC_TK_LIST, OnEndlabeleditTkList)
|
|
ON_NOTIFY(LVN_BEGINLABELEDIT, IDC_TK_LIST, OnBeginlabeleditTkList)
|
|
ON_COMMAND(ID_BLK_DEL, OnBlkDel)
|
|
ON_COMMAND(ID_BLK_COPY, OnBlkCopy)
|
|
ON_COMMAND(ID_BLK_EXPLODE, OnBlkExplode)
|
|
ON_COMMAND(ID_BLK_SORT, OnBlkSort)
|
|
ON_COMMAND(ID_BLK_UPGRADE, OnBlkUpgrade)
|
|
ON_COMMAND(ID_BLK_NEWLIB, OnBlkNewlib)
|
|
ON_NOTIFY(TVN_SELCHANGED, IDC_TK_TREE, OnSelchangedTkTree)
|
|
ON_NOTIFY(NM_CLICK, IDC_TK_TREE, OnClickTkTree)
|
|
ON_COMMAND(ID_BLK_DELKIND, OnBlkDelkind)
|
|
ON_NOTIFY(NM_RCLICK, IDC_TK_TREE, OnRclickTkTree)
|
|
ON_WM_MOUSEMOVE()
|
|
ON_COMMAND(IDOK, OnOK)
|
|
ON_WM_LBUTTONUP()
|
|
ON_WM_CLOSE()
|
|
//}}AFX_MSG_MAP
|
|
ON_COMMAND_EX(MenuID, OnSelectRecentBlb)
|
|
ON_COMMAND_EX(MenuID + 1, OnSelectRecentBlb)
|
|
ON_COMMAND_EX(MenuID + 2, OnSelectRecentBlb)
|
|
ON_COMMAND_EX(MenuID + 3, OnSelectRecentBlb)
|
|
ON_COMMAND_EX(MenuID + 4, OnSelectRecentBlb)
|
|
ON_COMMAND_EX(MenuID + 5, OnSelectRecentBlb)
|
|
END_MESSAGE_MAP()
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CSlbManDlg message handlers
|
|
void CSlbManDlg::OnClose()
|
|
{
|
|
SaveStatus();
|
|
CTKImageDlg::OnClose();
|
|
}
|
|
BOOL CSlbManDlg::OnInitDialog()
|
|
{
|
|
CTKImageDlg::OnInitDialog();
|
|
SetWindowText(_T("上华幻灯库管理"));
|
|
|
|
//add by xlc on 080828
|
|
m_menu.LoadMenu(IDR_MENU_SLB);
|
|
SetMenu(&m_menu);
|
|
|
|
InitToolBar();
|
|
LoadStatus();
|
|
ReadFile();
|
|
{
|
|
CTemporaryResourceOverride vTmp;
|
|
m_imageTree.Create( IDB_TREE, 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);
|
|
}
|
|
SetupTreeView();
|
|
|
|
return TRUE; // return TRUE unless you set the focus to a control
|
|
// EXCEPTION: OCX Property Pages should return FALSE
|
|
}
|
|
|
|
|
|
BOOL SelectSlb(XString& m_xsFileName, BOOL bIsOpen, CWnd *pDlgWnd)
|
|
{
|
|
|
|
CString csFileName=(const TCHAR *)m_xsFileName;
|
|
|
|
CFileDialog dlg(TRUE,_T("*.slb"),csFileName,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
|
|
_T("幻灯库(*.slb) |*.SLB||"), pDlgWnd);
|
|
TCHAR strDlgTitle[] = _T("选择幻灯库文件");
|
|
dlg.m_ofn.lpstrTitle = strDlgTitle;
|
|
|
|
if(dlg.DoModal()!=IDOK)
|
|
return FALSE;
|
|
TCHAR szShortPath[256]=_T("");
|
|
_tcscpy(szShortPath, dlg.GetPathName());
|
|
m_xsFileName=szShortPath;
|
|
if(!FindFile(m_xsFileName) && bIsOpen) {
|
|
AfxMessageBox(_T("请正确输入幻灯库文件名!"));
|
|
return FALSE;
|
|
}
|
|
if(FindFile(m_xsFileName) && !bIsOpen){
|
|
AfxMessageBox(_T("已存在同名幻灯库文件!"));
|
|
return FALSE;
|
|
}
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
BOOL CSlbManDlg::ReadFile()
|
|
{
|
|
if(m_xsFileName == _T("")) return FALSE;
|
|
m_lstSlb.Reset();
|
|
XSlideLib lib(m_xsFileName, _ios::in|_ios::binary);
|
|
TCHAR szDrive[_MAX_DRIVE]=_T(""), szDir[_MAX_DIR]=_T(""), szFile[_MAX_FNAME]=_T(""), szExt[_MAX_EXT]=_T("");
|
|
_tsplitpath(m_xsFileName, szDrive, szDir, szFile, szExt);
|
|
m_xsFilePath=(const TCHAR *)XString(_T("%s%s"), szDrive, szDir);
|
|
m_csSlbName = szFile;
|
|
lib.GetAll(m_lstSlb);
|
|
InitVSBar();
|
|
if(m_bSort)
|
|
m_lstSlb.QuickSort(_tcscmp);
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
void CSlbManDlg::ResetStateText()
|
|
{
|
|
CString csMsg, csRecord;
|
|
if(m_lstSlb.Length() ==0 ) return;
|
|
csRecord = m_lstSlb[m_nIndex];
|
|
csMsg.Format(_T("名称:%s 页号:%d/%d 总数: %d"), (const TCHAR *)csRecord, CurPage() + 1, TotalPages(), GetTotalRecords());
|
|
SetStateText(csMsg);
|
|
}
|
|
|
|
void CSlbManDlg::SetupTreeView()
|
|
{
|
|
m_bIsDelTree = TRUE;
|
|
m_treeCtrl.DeleteAllItems();
|
|
m_bIsDelTree = FALSE;
|
|
int lenTree = m_lstKindNames.Length();
|
|
HTREEITEM hTemp=NULL, hFilter=NULL; // ZJQ modify here
|
|
for(int i=0; i<lenTree; i++) {
|
|
CString str = (const TCHAR *)m_lstKindNames[i];
|
|
hTemp = m_treeCtrl.InsertItem(m_lstKindNames[i], 0, 1);
|
|
if(str == m_xsFileName)
|
|
hFilter = hTemp; // !!! 记住默认树节点句柄
|
|
}
|
|
m_bIsEndOpen = TRUE;
|
|
// ASSERT(hFilter); // ZJQ modify here
|
|
if(hFilter) {
|
|
m_treeCtrl.SelectItem(hFilter);
|
|
}
|
|
}
|
|
|
|
void CSlbManDlg::OnClickTkTree(NMHDR* pNMHDR, LRESULT* pResult)
|
|
{
|
|
*pResult = 0;
|
|
}
|
|
|
|
void CSlbManDlg::OnRclickTkTree(NMHDR* pNMHDR, LRESULT* pResult)
|
|
{
|
|
POINT pt;
|
|
TV_HITTESTINFO tvhti;
|
|
::GetCursorPos((LPPOINT)&pt);
|
|
ScreenToClient(&pt);
|
|
MapWindowPoints(&m_treeCtrl, &pt, 1);
|
|
tvhti.pt = pt;
|
|
m_treeCtrl.HitTest(&tvhti);
|
|
if(tvhti.hItem) {
|
|
m_nIndex = 0;
|
|
m_treeCtrl.SelectItem(tvhti.hItem);
|
|
}
|
|
*pResult = 0;
|
|
}
|
|
|
|
void CSlbManDlg::OnSelchangedTkTree(NMHDR* pNMHDR, LRESULT* pResult)
|
|
{
|
|
if(m_bIsDelTree) return;
|
|
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
|
|
if(!m_bIsEndOpen) return;
|
|
HTREEITEM myhtree;
|
|
myhtree = m_treeCtrl.GetSelectedItem();
|
|
m_treeCtrl.SetItemState(myhtree, TVIS_BOLD, TVIS_BOLD);
|
|
CString csCurSlb;
|
|
csCurSlb = m_treeCtrl.GetItemText(myhtree);
|
|
m_xsFileName = (const TCHAR *)csCurSlb;
|
|
ReadFile();
|
|
SetupList();
|
|
InitVSBar();
|
|
SetupImage(TRUE);
|
|
|
|
if(m_hOldItem) {
|
|
m_treeCtrl.SetItemState(m_hOldItem, 0, TVIS_BOLD); // 让上一个节点字型恢复
|
|
if((m_lstSlb.Length() != 0) && !IsValid(m_nIndex)) // 保证根目录选中时不执行
|
|
{
|
|
ASSERT(IsValid(m_nIndex));
|
|
SelectIndex(m_nIndex);
|
|
SetListHighLight();
|
|
m_listCtrl.SetHotItem(m_nIndex);
|
|
}
|
|
}
|
|
if(IsValid(m_nIndex))
|
|
SelectIndex(m_nIndex);
|
|
// ASSERT(IsValid(m_nIndex));
|
|
|
|
m_hOldItem = myhtree;
|
|
ResetStateText();
|
|
*pResult = 0;
|
|
}
|
|
|
|
|
|
void CSlbManDlg::SetupList()
|
|
{
|
|
m_listCtrl.DeleteAllItems();
|
|
int len = m_lstSlb.Length();
|
|
for(int i=0; i<len ; i++)
|
|
{
|
|
m_listCtrl.InsertItem(i, m_lstSlb[i]);
|
|
}
|
|
SelectIndex(0);
|
|
SetListHighLight();
|
|
}
|
|
|
|
// 设置nIndex个图像/幻灯
|
|
void CSlbManDlg::SetupNthImage(int nIndex, CImageDC *pImg)
|
|
{
|
|
BOOL bValid = IsValid(nIndex);
|
|
XString xsFile(256);
|
|
if (bValid) {
|
|
xsFile << (const TCHAR *)m_xsFilePath << (const TCHAR *)m_csSlbName << _T("(") << (const TCHAR *)m_lstSlb[nIndex]
|
|
<< _T(")");
|
|
}
|
|
|
|
if(!bValid) {
|
|
//pImg->Fill(RGB(192,192,192));
|
|
pImg->PaintSlide(NULL);
|
|
} else {
|
|
pImg->PaintSlide(xsFile);
|
|
}
|
|
}
|
|
|
|
int CSlbManDlg::GetTotalRecords() //取得当前链表的节点个数
|
|
{
|
|
return m_lstSlb.Length();
|
|
}
|
|
|
|
|
|
void CSlbManDlg::OnItemchangedTkList(NMHDR* pNMHDR, LRESULT* pResult)
|
|
{
|
|
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
|
|
int nSel = m_listCtrl.GetNextItem(-1, LVNI_SELECTED);
|
|
if(nSel < 0)
|
|
return;
|
|
SelectIndex(nSel);
|
|
m_listCtrl.SetHotItem(nSel);
|
|
|
|
*pResult = 0;
|
|
ResetStateText();
|
|
}
|
|
|
|
void CSlbManDlg::OnLButtonDown(UINT nFlags, CPoint point)
|
|
{
|
|
if(IsPointOnImage(point) && (!m_bBiginEdit))
|
|
SelectPageIndex(GetPageIndex(point));
|
|
else {
|
|
CTKImageDlg::OnLButtonDown(nFlags, point);
|
|
return;
|
|
}
|
|
m_bCellIsDragging = TRUE;
|
|
m_dragTarget = NULL;
|
|
SetCapture();
|
|
|
|
ResetStateText();
|
|
CTKImageDlg::OnLButtonDown(nFlags, point);
|
|
}
|
|
|
|
void CSlbManDlg::OnLButtonUp(UINT nFlags, CPoint point)
|
|
{
|
|
if(m_bCellIsDragging == TRUE){
|
|
HTREEITEM hOldSelItem;
|
|
hOldSelItem = m_treeCtrl.GetSelectedItem();
|
|
|
|
if((m_dragTarget != NULL) && (m_dragTarget != hOldSelItem)){
|
|
if(!IsValid(m_nIndex)) {
|
|
m_bCellIsDragging = FALSE;
|
|
ReleaseCapture();
|
|
m_treeCtrl.SelectDropTarget(NULL);
|
|
return;
|
|
}
|
|
XString xsSlbName;
|
|
xsSlbName = m_treeCtrl.GetItemText(m_dragTarget);
|
|
XSlideLib lib(m_xsFileName);// 拷贝源
|
|
XSlideLib lib2(xsSlbName); // 拷贝目标
|
|
XStringList lstSlb;
|
|
lstSlb.Reset();
|
|
lib2.GetAll(lstSlb);
|
|
|
|
|
|
XString xsSldName = m_lstSlb[m_nIndex];
|
|
int ret = lstSlb.Index(xsSldName, 0);
|
|
if(ret >= 0) { // 库中有此项,同名!
|
|
XString xsAlert(256);
|
|
xsAlert << xsSldName << _T(" 已存在,是否覆盖?") ;
|
|
if(MessageBox(xsAlert, _T("警告"), MB_OKCANCEL|MB_ICONQUESTION) != IDOK)
|
|
{
|
|
lib2.Close();
|
|
lib.Close();
|
|
m_bCellIsDragging = FALSE;
|
|
ReleaseCapture();
|
|
m_treeCtrl.SelectDropTarget(NULL);
|
|
return;
|
|
}
|
|
}
|
|
TCHAR dwgPrefix[256]=_T("");
|
|
GetTempPath(255, dwgPrefix);
|
|
if(dwgPrefix[_tcslen(dwgPrefix)-1]!=_T('\\'))
|
|
_tcscat(dwgPrefix, _T("\\"));
|
|
_tcscat(dwgPrefix, _T("SRTEMP\\"));
|
|
MakeDir(dwgPrefix);
|
|
|
|
_tcscat(dwgPrefix, xsSldName);
|
|
_tcscat(dwgPrefix, _T(".sld"));
|
|
lstSlb.Reset();
|
|
lib.GetAll(lstSlb);
|
|
int nIndex = -1;
|
|
nIndex = lstSlb.Index(xsSldName, FALSE);
|
|
|
|
if(m_bSort)
|
|
lib.Copy(nIndex, dwgPrefix);
|
|
else
|
|
lib.Copy(m_nIndex, dwgPrefix);
|
|
lstSlb.Reset();
|
|
lib.GetAll(lstSlb);
|
|
lib2.Append(dwgPrefix);
|
|
lib.Close();
|
|
lib2.Close();
|
|
_tremove(dwgPrefix);
|
|
m_dragTarget = NULL;
|
|
SetStateText(_T("已成功复制幻灯片!"));
|
|
}
|
|
|
|
m_bCellIsDragging = FALSE;
|
|
ReleaseCapture();
|
|
m_treeCtrl.SelectDropTarget(NULL);
|
|
|
|
}
|
|
CTKImageDlg::OnLButtonUp(nFlags, point);
|
|
}
|
|
|
|
void CSlbManDlg::OnMouseMove(UINT nFlags, CPoint point)
|
|
{
|
|
|
|
if(!(nFlags & MK_LBUTTON) ) {
|
|
CTKImageDlg::OnMouseMove(nFlags, point);
|
|
return;
|
|
}
|
|
if(!m_bCellIsDragging) {
|
|
CTKImageDlg::OnMouseMove(nFlags, point);
|
|
return;
|
|
}
|
|
|
|
CPoint pntScreen(point);
|
|
ClientToScreen(&pntScreen);
|
|
CRect rcTree;
|
|
m_treeCtrl.GetWindowRect(rcTree);
|
|
CWinApp* pApp = AfxGetApp();
|
|
if( rcTree.PtInRect( pntScreen ) == TRUE ){ // 鼠标落在TREE中换光标
|
|
{
|
|
CTemporaryResourceOverride vTemp;
|
|
HICON hIcon = pApp->LoadCursor(IDC_CUR_CELLCOPY);
|
|
SetCursor(hIcon);
|
|
}
|
|
CPoint ptTree( point );
|
|
MapWindowPoints( &m_treeCtrl, &ptTree, 1 );
|
|
UINT uHitTest = TVHT_ONITEM;
|
|
m_dragTarget = m_treeCtrl.HitTest(ptTree, &uHitTest);
|
|
if(m_dragTarget != NULL)
|
|
m_treeCtrl.SelectDropTarget(m_dragTarget);
|
|
}
|
|
else {
|
|
{
|
|
CTemporaryResourceOverride vTemp;
|
|
HICON hIcon = ::LoadCursor( NULL,IDC_NO );
|
|
SetCursor(hIcon);
|
|
}
|
|
}
|
|
|
|
|
|
CTKImageDlg::OnMouseMove(nFlags, point);}
|
|
|
|
|
|
void CSlbManDlg::InitToolBar()
|
|
{
|
|
CTemporaryResourceOverride vTmp;
|
|
|
|
int ButtonID[]={ ID_BLK_NEWLIB, ID_BLK_OPENLIB, 0, ID_BLK_UPGRADE, ID_BLK_COPY,
|
|
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, 14, IDR_SLBMAN, this);
|
|
m_ToolBar.SetStyle(ID_BLK_SORT, TBSTYLE_CHECK);
|
|
m_ToolBar.SetStyle(ID_BLK_OPENLIB, TBSTYLE_DROPDOWN);
|
|
m_ToolBar.SetStyle(ID_BLK_LAYOUT, TBSTYLE_DROPDOWN);
|
|
}
|
|
|
|
void CSlbManDlg::OnToolbarDropDown(NMHDR* pnmtb0, LRESULT *plr)
|
|
{
|
|
NMTOOLBAR* pnmtb= (NMTOOLBAR *)pnmtb0;
|
|
|
|
if(pnmtb->iItem == ID_BLK_LAYOUT)
|
|
OnBlkLayout();
|
|
else if(pnmtb->iItem == ID_BLK_OPENLIB) {
|
|
CWnd *pWnd = &m_ToolBar;
|
|
CRect rc;
|
|
pWnd->SendMessage(TB_GETRECT, pnmtb->iItem, (LPARAM)&rc);
|
|
pWnd->ClientToScreen(&rc);
|
|
|
|
CMenu popupMenu;
|
|
{
|
|
if(m_pPopupMenu) {
|
|
m_pPopupMenu->DestroyMenu();
|
|
m_pPopupMenu->CreatePopupMenu();
|
|
} else {
|
|
m_pPopupMenu=new CMenu;
|
|
m_pPopupMenu->CreatePopupMenu();
|
|
}
|
|
|
|
int len, i;
|
|
len = m_lstBlbNames.Length();
|
|
for(i=0; i< len; i++) // 将最近使用过的库加入菜单
|
|
m_pPopupMenu->AppendMenu(MF_STRING, MenuID + i, m_lstBlbNames[i]);
|
|
}
|
|
m_pPopupMenu->TrackPopupMenu( TPM_LEFTALIGN | TPM_LEFTBUTTON | TPM_VERTICAL,
|
|
rc.left, rc.bottom, this, &rc);
|
|
}
|
|
}
|
|
|
|
void CSlbManDlg::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_IMAGELAYOUT);
|
|
}
|
|
pPopup = menu.GetSubMenu(0);
|
|
pPopupLayout = pPopup->GetSubMenu(8);
|
|
|
|
pPopupLayout->TrackPopupMenu( TPM_LEFTALIGN | TPM_LEFTBUTTON | TPM_VERTICAL,
|
|
rc.left, rc.bottom, this, &rc);
|
|
|
|
}
|
|
|
|
|
|
//读状态
|
|
void CSlbManDlg::LoadStatus()
|
|
{
|
|
|
|
CRegProperty regProp(GetRegLocation(), _T("SLBMAN"));
|
|
regProp.SetTopRootKey(HKEY_CURRENT_USER);
|
|
int nRow=3, nColumn=2;
|
|
if(regProp.GetValue(_T("PageRow"), nRow) &&
|
|
regProp.GetValue(_T("PageColmn"), nColumn)) {
|
|
ASSERT(nRow>0 && nColumn>0);
|
|
}
|
|
CString csCurslb;
|
|
regProp.GetValue(_T("The cur slb"), csCurslb);
|
|
m_xsFileName = (const TCHAR *)csCurslb;
|
|
m_lstKindNames.Reset();
|
|
m_lstBlbNames.Reset();
|
|
|
|
for(int i=0; i<g_nMaxRecentSlb; i++) {
|
|
XString sKey(256), sKey2(256);
|
|
CString csValue, csValue2;
|
|
sKey << _T("The recent slb") << (i + 1);
|
|
sKey2 << _T("The used slb") << (i + 1);
|
|
regProp.GetValue(sKey, csValue);
|
|
regProp.GetValue(sKey2, csValue2);
|
|
if(!csValue.IsEmpty() && FindFile(csValue))
|
|
m_lstBlbNames.Append(tstrnew(csValue));
|
|
if(!csValue2.IsEmpty() && FindFile(csValue2))
|
|
m_lstKindNames.Append(tstrnew(csValue2));
|
|
}
|
|
SetPageSize(nRow, nColumn);
|
|
return;
|
|
}
|
|
|
|
|
|
// ONLY USED IN HKEY_CURRENT_USER
|
|
BOOL DelKey(LPCTSTR pszRoot, LPCTSTR pszKey)
|
|
{
|
|
LONG lRet;
|
|
HKEY m_hKey;
|
|
lRet=RegOpenKeyEx(HKEY_CURRENT_USER, pszRoot, 0L,KEY_ALL_ACCESS,&m_hKey);
|
|
if(lRet!=ERROR_SUCCESS)
|
|
return FALSE;
|
|
lRet = RegDeleteValue(m_hKey, pszKey);
|
|
RegCloseKey(m_hKey); // ZJQ add here
|
|
if(lRet!=ERROR_SUCCESS)
|
|
return FALSE;
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
//存储状态
|
|
void CSlbManDlg::SaveStatus()
|
|
{
|
|
XString xsRoot;
|
|
_tcscat(xsRoot, GetRegLocation());
|
|
_tcscat(xsRoot, _T("\\SLBMAN"));
|
|
|
|
|
|
for(int i=0;i<g_nMaxRecentSlb;i++)
|
|
{
|
|
XString sKey(256);
|
|
sKey << _T("The used slb") << (i + 1);
|
|
DelKey(xsRoot, sKey);
|
|
}
|
|
|
|
CRegProperty regProp(GetRegLocation(), _T("SLBMAN"));
|
|
regProp.SetTopRootKey(HKEY_CURRENT_USER);
|
|
regProp.SetValue(_T("PageRow"), m_nPageRow);
|
|
regProp.SetValue(_T("PageColmn"), m_nPageColumn);
|
|
|
|
int nLen = m_lstBlbNames.Length();
|
|
for(i=0; i<nLen; i++) {
|
|
if(m_xsFileName==(LPCTSTR)m_lstBlbNames[i]) {
|
|
m_lstBlbNames.Remove(i);
|
|
nLen--;
|
|
break;
|
|
}
|
|
}
|
|
if(nLen >= g_nMaxRecentSlb) m_lstBlbNames.Remove(0);
|
|
m_lstBlbNames.Append(tstrnew(m_xsFileName));
|
|
nLen=m_lstBlbNames.Length();
|
|
for(i=0; i<nLen; i++) {
|
|
if(i<g_nMaxRecentSlb) {
|
|
XString sKey(256), sValue(256);
|
|
sKey << _T("The recent slb") << (i + 1); //The recent slb
|
|
sValue << m_lstBlbNames[i];
|
|
regProp.SetValue(sKey, sValue);
|
|
}
|
|
else break;
|
|
}
|
|
nLen = m_lstKindNames.Length();
|
|
for(i=0; i<nLen; i++) {
|
|
if(i < g_nMaxRecentSlb) {
|
|
XString sKey(256), sValue(256);
|
|
sKey << _T("The used slb") << (i + 1); //The used slb
|
|
sValue << m_lstKindNames[i];
|
|
regProp.SetValue(sKey, sValue);
|
|
}
|
|
else break;
|
|
}
|
|
regProp.SetValue(_T("The cur slb"),(const TCHAR*)m_xsFileName);//The cur slb
|
|
return;
|
|
}
|
|
|
|
void CSlbManDlg::OnOK()
|
|
{
|
|
SaveStatus();
|
|
CTKImageDlg::OnOK();
|
|
}
|
|
|
|
void CSlbManDlg::OnBlkDelkind()
|
|
{
|
|
int nLen = m_lstKindNames.Length();
|
|
for(int i=0; i<nLen; i++) {
|
|
if(m_xsFileName==(LPCTSTR)m_lstKindNames[i]) {
|
|
m_lstKindNames.Remove(i);
|
|
nLen--;
|
|
break;
|
|
}
|
|
}
|
|
if(m_lstKindNames.Length() == 0 ) {
|
|
m_xsFileName = _T("");
|
|
m_lstSlb.Reset();
|
|
SetupList();
|
|
}
|
|
else
|
|
m_xsFileName = (const TCHAR *)m_lstKindNames[0];
|
|
m_bIsEndOpen = FALSE;
|
|
SetupTreeView();
|
|
SetupImage(TRUE);
|
|
SelectIndex(0);
|
|
}
|
|
|
|
void CSlbManDlg::OnBlkOpenlib()
|
|
{
|
|
int nLen = m_lstKindNames.Length();
|
|
if(nLen >= g_nMaxRecentSlb) {
|
|
AfxMessageBox(_T("对不起,您最多只能打开6个幻灯库。"));
|
|
return;
|
|
}
|
|
if(!SelectSlb(m_xsFileName, TRUE, this)) return;
|
|
for(int i=0; i<nLen; i++) {
|
|
if(m_xsFileName==(LPCTSTR)m_lstKindNames[i]) {
|
|
m_lstKindNames.Remove(i);
|
|
nLen--;
|
|
break;
|
|
}
|
|
}
|
|
if(nLen >= g_nMaxRecentSlb)
|
|
m_lstBlbNames.Remove(0);
|
|
m_lstKindNames.Append(tstrnew(m_xsFileName));
|
|
m_bIsEndOpen = FALSE;
|
|
|
|
|
|
SetupTreeView();
|
|
SaveStatus();
|
|
SetupImage(TRUE);
|
|
SelectIndex(0);
|
|
}
|
|
|
|
//选最近库
|
|
BOOL CSlbManDlg::OnSelectRecentBlb(UINT nID)
|
|
{
|
|
|
|
int nLen = m_lstBlbNames.Length();
|
|
int nIndex=nID - MenuID;
|
|
ASSERT(nIndex < nLen);
|
|
XString xsName;
|
|
xsName = m_lstBlbNames[nIndex];
|
|
if(_tcsicmp(xsName, m_xsFileName)!=0) {
|
|
nLen = m_lstKindNames.Length();
|
|
for(int i=0; i<nLen; i++) {
|
|
if(_tcsicmp(xsName, m_lstKindNames[i])==0) {
|
|
m_lstKindNames.Remove(i);
|
|
nLen--;
|
|
break;
|
|
}
|
|
}
|
|
m_lstKindNames.Append(tstrnew(xsName));
|
|
m_xsFileName = (const TCHAR *)xsName;
|
|
m_nIndex= m_lstSlb.Length()>0 ? 0:-1;
|
|
SetupTreeView();
|
|
SetupImage(TRUE);
|
|
SelectIndex(m_nIndex);
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
void CSlbManDlg::OnContextMenu(CWnd* pWnd, CPoint point)
|
|
{
|
|
CMenu menu;
|
|
{
|
|
CTemporaryResourceOverride vTemp;//加载菜单
|
|
menu.LoadMenu(IDR_MENU_SLBMAN);
|
|
}
|
|
if(IsInRect(IDC_PIC_IMAGE, point))
|
|
{
|
|
CMenu *pSubMenu = menu.GetSubMenu(0);
|
|
if(pSubMenu)
|
|
pSubMenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON,
|
|
point.x, point.y, this, NULL);
|
|
}
|
|
if(IsInRect(IDC_TK_LIST, point))
|
|
{
|
|
CMenu *pSubMenu = menu.GetSubMenu(0);
|
|
if(pSubMenu)
|
|
pSubMenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON,
|
|
point.x, point.y, this, NULL);
|
|
}
|
|
if(IsInRect(IDC_TK_TREE, point))
|
|
{
|
|
CMenu Menu;
|
|
Menu.LoadMenu(IDR_MENU_TREE_SLBMAN);
|
|
CMenu *pSubMenu = Menu.GetSubMenu(0);
|
|
|
|
if(pSubMenu)
|
|
pSubMenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON,
|
|
point.x, point.y, this, NULL);
|
|
}
|
|
}
|
|
|
|
void CSlbManDlg::OnBlkRename()
|
|
{
|
|
m_listCtrl.SetFocus();
|
|
ASSERT(m_nIndex>=0);
|
|
m_listCtrl.EditLabel(m_nIndex);
|
|
}
|
|
|
|
void CSlbManDlg::OnEndlabeleditTkList(NMHDR* pNMHDR, LRESULT* pResult)
|
|
{
|
|
LV_DISPINFO* pDispInfo = (LV_DISPINFO*)pNMHDR;
|
|
if((pDispInfo->item.pszText != NULL)&&(pDispInfo->item.iItem != -1))
|
|
{
|
|
|
|
XSlideLib lib(m_xsFileName);
|
|
XString xsNewName;
|
|
xsNewName= pDispInfo->item.pszText;
|
|
int ret = m_lstSlb.Index(xsNewName, 0);
|
|
if(ret >= 0) { // 链表中有此项,同名!
|
|
lib.Close();
|
|
AfxMessageBox(_T("对不起,不能重名!"));
|
|
m_bBiginEdit = FALSE;
|
|
*pResult = 0;
|
|
return;
|
|
}
|
|
if(!lib.Rename(pDispInfo->item.iItem, pDispInfo->item.pszText))
|
|
{
|
|
m_bBiginEdit = FALSE;
|
|
AfxMessageBox(_T("对不起,系统更名失败!"));
|
|
*pResult = 0;
|
|
return;
|
|
}
|
|
lib.Close();
|
|
ReadFile();
|
|
SetupList();
|
|
SelectIndex(m_nIndex);
|
|
}
|
|
m_bBiginEdit = FALSE;
|
|
*pResult = 0;
|
|
|
|
}
|
|
|
|
void CSlbManDlg::OnBeginlabeleditTkList(NMHDR* pNMHDR, LRESULT* pResult)
|
|
{
|
|
LV_DISPINFO* pDispInfo = (LV_DISPINFO*)pNMHDR;
|
|
m_bBiginEdit = TRUE;
|
|
*pResult = 0;
|
|
}
|
|
|
|
void CSlbManDlg::OnBlkDel()
|
|
{
|
|
XSlideLib lib(m_xsFileName);
|
|
if(MessageBox(_T("注意:此幻灯片删除将无法恢复!您是否真的删除?"),_T("警告"),MB_OKCANCEL|MB_ICONQUESTION) != IDOK)
|
|
return;
|
|
|
|
lib.Remove(m_nIndex);
|
|
lib.Close();
|
|
ReadFile();
|
|
SetupList();
|
|
SetupImage(TRUE);
|
|
if(m_nIndex != 0 && m_nIndex != (m_lstSlb.Length() - 1))
|
|
m_nIndex--; // 当前图块不是首尾时,将其值减1
|
|
|
|
ASSERT(m_nIndex>=0);
|
|
SelectIndex(m_nIndex);
|
|
|
|
}
|
|
|
|
int DragInsertBlock(const TCHAR *szBlock, int nFlag, const AcGeScale3d &scales);
|
|
//作为图形动态拖动的插入图中
|
|
int CSlbManDlg::DragInsert()
|
|
{
|
|
int nRet=RTERROR;
|
|
if(IsValid(m_nIndex)) {
|
|
XString sFile(256);
|
|
sFile << (const TCHAR *)m_xsFilePath << (const TCHAR *)m_csSlbName << _T("(") << (const TCHAR *)m_lstSlb[m_nIndex]
|
|
<< _T(")");
|
|
XImageBufList m_slide;
|
|
if(m_slide.FromSlide(sFile)==RTNORM) {
|
|
AcDbBlockTableRecord *pRec=new AcDbBlockTableRecord();
|
|
pRec->setName(_T("*U"));
|
|
AddBlock(pRec, Adesk::kFalse);
|
|
const TCHAR *pszName=NULL;
|
|
pRec->getName(pszName);
|
|
XString sBlkName;
|
|
sBlkName=pszName;
|
|
XPoint ptLow, ptUp;
|
|
m_slide.GetExtend(ptLow, ptUp);
|
|
ads_matrix mat;
|
|
XPoint ptOrg;
|
|
ptLow.GetMoveMatrix(ptOrg, mat);
|
|
m_slide.Transform(mat);
|
|
for(int i=0; i<m_slide.Length(); i++) {
|
|
XLine &ln=*m_slide[i];
|
|
AcDbLine *pLine=new AcDbLine(ln.GetStartPoint(), ln.GetEndPoint());
|
|
if(pRec->appendAcDbEntity(pLine)==Acad::eOk)
|
|
pLine->close();
|
|
else
|
|
delete pLine;
|
|
}
|
|
|
|
for(i=0; i<m_slide.m_lstSolid.Length(); i++) {
|
|
XColorSolid &solid=*m_slide.m_lstSolid[i];
|
|
XPoly2D poly2d;
|
|
solid.AsPoly2D(poly2d);
|
|
//poly2d.flag = 1;
|
|
poly2d.SetFlag(1);
|
|
AcDbHatch *pHatch = NewHatchFromPoly2D(poly2d);
|
|
if(pHatch) {
|
|
if(pRec->appendAcDbEntity(pHatch)==Acad::eOk)
|
|
pHatch->close();
|
|
else
|
|
delete pHatch;
|
|
}
|
|
}
|
|
|
|
pRec->close();
|
|
|
|
int nInsFlag=IBF_MINSERT|IBF_ROT90|IBF_MIRLR|IBF_MIRUD|IBF_ALIGN
|
|
|IBF_FRAME|IBF_ROTATE|IBF_BASEPT|IBF_RESEL;
|
|
if(!g_nRunMode) {
|
|
nInsFlag |= IBF_TINSERT;
|
|
nRet=DragInsertBlock(sBlkName, nInsFlag, AcGeScale3d(1,1,1));
|
|
} else {
|
|
nRet=DragInsertBlock1(sBlkName, nInsFlag, AcGeScale3d(1,1,1));
|
|
}
|
|
}
|
|
}
|
|
return nRet;
|
|
}
|
|
|
|
|
|
BOOL SelectSld(XString& m_xsFileName, CWnd *pDlgWnd)
|
|
{
|
|
CString csFileName = (const TCHAR *)m_xsFileName;
|
|
csFileName = csFileName + _T(".sld");
|
|
CFileDialog dlg(TRUE,_T("*.sld"),csFileName,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
|
|
_T("Slide(*.sld) |*.SLD||"), pDlgWnd);
|
|
TCHAR strDlgTitle[] = _T("选择幻灯片文件");
|
|
dlg.m_ofn.lpstrTitle = strDlgTitle;
|
|
if(dlg.DoModal()!=IDOK)
|
|
return FALSE;
|
|
TCHAR szShortPath[256]=_T("");
|
|
_tcscpy(szShortPath, (const TCHAR *)dlg.GetPathName());
|
|
m_xsFileName=szShortPath;
|
|
if(FindFile(m_xsFileName)) {
|
|
XString xsMsg(256);
|
|
xsMsg << m_xsFileName << _T("已存在, 要覆盖它吗?");
|
|
if(AfxMessageBox(xsMsg,MB_OKCANCEL|MB_ICONQUESTION) != IDOK)
|
|
return FALSE;
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
void CSlbManDlg::OnBlkCopy()
|
|
{
|
|
if(!IsValid(m_nIndex)) return;
|
|
XString xsSldName = m_lstSlb[m_nIndex];
|
|
if(!SelectSld(xsSldName, this)) return;
|
|
XSlideLib lib(m_xsFileName);
|
|
lib.Copy(m_nIndex, xsSldName);
|
|
lib.Close();
|
|
|
|
}
|
|
|
|
|
|
void CSlbManDlg::OnBlkExplode()
|
|
{
|
|
extern BOOL GetFolderDia(XString &sFolder, CWnd *pParent, const TCHAR *pszTitle);
|
|
|
|
XString sFolder;
|
|
if(!GetFolderDia(sFolder, this, _T("选择释放幻灯文件的目录")))
|
|
return;
|
|
XPathParser parser(m_xsFileName);
|
|
for(int i=0; i<m_lstSlb.Length(); i++) {
|
|
XString xsSldName;
|
|
TCHAR *pItem = m_lstSlb[i];
|
|
xsSldName << sFolder << pItem << _T(".slb");
|
|
XSlideLib lib(m_xsFileName);
|
|
lib.Copy(i, xsSldName);
|
|
}
|
|
}
|
|
|
|
void CSlbManDlg::OnBlkSort()
|
|
{
|
|
if (m_nIndex<0)
|
|
{
|
|
return;
|
|
}
|
|
|
|
m_bSort = !m_bSort;
|
|
if(m_bSort)
|
|
SetStateText(_T("排序!"));
|
|
else
|
|
SetStateText(_T("取消排序!"));
|
|
|
|
XString xsDrg;
|
|
xsDrg = (const TCHAR *)m_lstSlb[m_nIndex];
|
|
ReadFile();
|
|
SetupList();
|
|
for(int i=0; i < m_lstSlb.Length(); i++) {
|
|
XString xstemp = m_lstSlb[i];
|
|
if(xstemp == xsDrg) {
|
|
m_nIndex = i; // 找出本图新的位置
|
|
break;
|
|
}
|
|
}
|
|
InitVSBar();
|
|
SetupImage(TRUE);
|
|
SetListHighLight();
|
|
}
|
|
|
|
|
|
extern TCHAR g_szDirName[]; //申请自己的16K缓冲区
|
|
|
|
|
|
void CSlbManDlg::OnBlkUpgrade()
|
|
{
|
|
SetStateText(_T("批量入库"));
|
|
XSlideLib lib(m_xsFileName);
|
|
const TCHAR *pszFilter = _T("Slide(*.sld) |*.SLD||");
|
|
CFileDialog dlg(TRUE, _T("*.sld"), NULL, OFN_ALLOWMULTISELECT|OFN_HIDEREADONLY, pszFilter, this);
|
|
TCHAR strDlgTitle[] = _T("选择需入库的DWG文件");
|
|
TCHAR strFileName[4056] = _T(""); //申请自己的16K缓冲区
|
|
int maxChar = 4055;
|
|
dlg.m_ofn.lpstrFile = strFileName;
|
|
dlg.m_ofn.nMaxFile = maxChar;
|
|
dlg.m_ofn.lpstrTitle = strDlgTitle;
|
|
dlg.m_ofn.lpstrInitialDir = g_szDirName;
|
|
if(dlg.DoModal() != IDOK) return;
|
|
_tcscpy(g_szDirName, dlg.GetPathName());
|
|
POSITION pos = dlg.GetStartPosition();
|
|
while(pos!=NULL)
|
|
{
|
|
CString csIndex;
|
|
csIndex = dlg.GetNextPathName(pos);
|
|
TCHAR szDrive[_MAX_DRIVE]=_T(""), szDir[_MAX_DIR]=_T(""), szFile[_MAX_FNAME]=_T(""), szExt[_MAX_EXT]=_T("");
|
|
_tsplitpath(csIndex, szDrive, szDir, szFile, szExt);
|
|
|
|
int ret = m_lstSlb.Index(szFile, 0);
|
|
if(ret >= 0) { // 链表中有此项,同名!
|
|
XString xsAlert(256);
|
|
xsAlert << csIndex << _T(" 已存在,是否覆盖?") ;
|
|
if(MessageBox(xsAlert, _T("警告"), MB_OKCANCEL|MB_ICONQUESTION) != IDOK)
|
|
continue;
|
|
}
|
|
lib.Append(csIndex);
|
|
}
|
|
ReadFile();
|
|
SetupList();
|
|
SetupImage(TRUE);
|
|
}
|
|
|
|
void CSlbManDlg::OnBlkNewlib()
|
|
{
|
|
SetStateText(_T("新建一幻灯库文件"));
|
|
if(!SelectSlb(m_xsFileName, FALSE, this)) return;
|
|
int nLen = m_lstKindNames.Length();
|
|
for(int i=0; i<nLen; i++) {
|
|
if(m_xsFileName==(LPCTSTR)m_lstKindNames[i]) {
|
|
m_lstKindNames.Remove(i);
|
|
nLen--;
|
|
break;
|
|
}
|
|
}
|
|
if(nLen >= g_nMaxRecentSlb) m_lstBlbNames.Remove(0);
|
|
m_lstKindNames.Append(tstrnew(m_xsFileName));
|
|
m_bIsEndOpen = FALSE;
|
|
|
|
SetupTreeView();
|
|
SetupImage(TRUE);
|
|
|
|
} |