698 lines
16 KiB
C++
698 lines
16 KiB
C++
#include "stdafx.h"
|
|
|
|
#include "AddBlockDlg.h"
|
|
#include "dbsymtb.h "
|
|
#include "RnameBlkDlg.h"
|
|
#ifdef _DEBUG
|
|
#define new DEBUG_NEW
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
|
|
CAddBlockDlg::CAddBlockDlg(CWnd* pParent /*=NULL*/, HINSTANCE hInstance /*=NULL*/)
|
|
: CAcUiDialog(CAddBlockDlg::IDD, pParent, hInstance)
|
|
{
|
|
//{{AFX_DATA_INIT(CAddBlockDlg)
|
|
m_pDescDb=NULL;
|
|
//}}AFX_DATA_INIT
|
|
m_bAddCur=FALSE;
|
|
}
|
|
|
|
|
|
CAddBlockDlg::~CAddBlockDlg()
|
|
{
|
|
if(m_pDescDb!=NULL)
|
|
delete m_pDescDb;
|
|
}
|
|
|
|
void CAddBlockDlg::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CAcUiDialog::DoDataExchange(pDX);
|
|
//{{AFX_DATA_MAP(CAddBlockDlg)
|
|
DDX_Control(pDX, IDC_LISTORG, m_ListOrg);
|
|
DDX_Control(pDX, IDC_LISTDESC, m_ListDesc);
|
|
//}}AFX_DATA_MAP
|
|
}
|
|
|
|
|
|
BEGIN_MESSAGE_MAP(CAddBlockDlg, CAcUiDialog)
|
|
//{{AFX_MSG_MAP(CAddBlockDlg)
|
|
ON_BN_CLICKED(IDC_INSERTBTN, OnInsertbtn)
|
|
ON_BN_CLICKED(IDC_DELETEBTN, OnDeletebtn)
|
|
ON_BN_CLICKED(IDC_BDELETEALLBTN, OnBdeleteallbtn)
|
|
ON_WM_SIZE()
|
|
ON_BN_CLICKED(IDC_BDRENAME, OnBdrename)
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CAddBlockDlg message handlers
|
|
|
|
void CAddBlockDlg::OnOK()
|
|
{
|
|
InsertBlockToDesc(m_sOrgPath,m_itemArr);
|
|
Acad::ErrorStatus es=m_pDescDb->saveAs(m_sDescPath);
|
|
if(es!=Acad::eOk)
|
|
AfxMessageBox(_T("\n保存失败"));
|
|
CAcUiDialog::OnOK();
|
|
}
|
|
|
|
void CAddBlockDlg::OnCancel()
|
|
{
|
|
CAcUiDialog::OnCancel();
|
|
}
|
|
|
|
|
|
void CAddBlockDlg::SetOrgPath(CString sOrgPath)
|
|
{
|
|
m_sOrgPath=sOrgPath;
|
|
}
|
|
|
|
|
|
void CAddBlockDlg::SetDescPath(CString sDescPath)
|
|
{
|
|
m_sDescPath=sDescPath;
|
|
}
|
|
|
|
|
|
void CAddBlockDlg::SetOrgList()
|
|
{
|
|
m_ListOrg.DeleteAllItems();
|
|
// 清除所有的图形
|
|
m_ListImageOrg.DeleteImageList();
|
|
|
|
AcDbDatabase *pDb = NULL;
|
|
AcDbBlockTable *pBlockTable = NULL;
|
|
AcDbBlockTableIterator *pBlkItr = NULL;
|
|
AcDbBlockTableRecord *pBlkTlbRcd=NULL;
|
|
CStringArray strNameArray;
|
|
// 得到一个DWG文件内部的所有块
|
|
acDocManagerPtr()->lockDocument(curDoc());
|
|
if(!m_bAddCur)
|
|
{
|
|
pDb = new AcDbDatabase(Adesk::kFalse);
|
|
Acad :: ErrorStatus res1 = pDb->readDwgFile(m_sOrgPath);
|
|
}
|
|
else
|
|
pDb=acdbHostApplicationServices()->workingDatabase();
|
|
Acad :: ErrorStatus res = pDb->getSymbolTable(pBlockTable, AcDb::kForRead);
|
|
if(res != Acad::eOk)
|
|
{
|
|
acDocManagerPtr()->unlockDocument(curDoc());
|
|
if(!m_bAddCur)
|
|
delete pDb;
|
|
return;
|
|
}
|
|
pBlockTable->newIterator(pBlkItr);
|
|
|
|
if(pBlkItr == NULL)
|
|
{
|
|
pBlockTable->close();
|
|
delete pBlkItr;
|
|
if(!m_bAddCur)
|
|
delete pDb;
|
|
acDocManagerPtr()->unlockDocument(curDoc());
|
|
return;
|
|
}
|
|
|
|
// 得到内部块的数量
|
|
int iNum = 0;
|
|
for(; !pBlkItr->done(); pBlkItr->step())
|
|
{
|
|
iNum++;
|
|
}
|
|
delete pBlkItr;
|
|
pBlockTable->newIterator(pBlkItr);
|
|
|
|
m_ListImageOrg.Create(32, 32, ILC_MASK, iNum, 0);
|
|
ACHAR *RcdName;
|
|
iNum=0;
|
|
for(;!pBlkItr->done();pBlkItr->step())
|
|
{
|
|
pBlkItr->getRecord(pBlkTlbRcd,AcDb::kForWrite);
|
|
pBlkTlbRcd->getName(RcdName);
|
|
pBlkTlbRcd->close();
|
|
CString sName=RcdName;
|
|
free(RcdName);
|
|
if(sName.Find(_T("*"))>=0)
|
|
continue;
|
|
// 根据一个内部块,得到对应的ICON
|
|
if(pBlkTlbRcd->hasPreviewIcon())
|
|
{
|
|
AcDbBlockTableRecord::PreviewIcon previewIcon;
|
|
pBlkTlbRcd->getPreviewIcon(previewIcon);
|
|
HANDLE hDib = BaseFuncs::readDibFromMemory((LPVOID)previewIcon.asArrayPtr());
|
|
HBITMAP hBitmap = BaseFuncs::BitmapFromDib(hDib, NULL);
|
|
if(hBitmap)
|
|
{
|
|
m_ListImageOrg.Add(CBitmap::FromHandle(hBitmap), RGB(255, 0, 255));
|
|
::DeleteObject(hBitmap);
|
|
strNameArray.Add(sName);
|
|
}
|
|
if(hDib)
|
|
GlobalFree(hDib);
|
|
}
|
|
else
|
|
{
|
|
HICON hIcon=AfxGetApp()->LoadIcon(IDI_ICON1);
|
|
m_ListImageOrg.Add(hIcon);
|
|
strNameArray.Add(sName);
|
|
}
|
|
}
|
|
pBlockTable->close();
|
|
delete pBlkItr;
|
|
if(!m_bAddCur)
|
|
delete pDb;
|
|
acDocManagerPtr()->unlockDocument(curDoc());
|
|
|
|
// 插入到ListCtrl中
|
|
int iCount = (int)strNameArray.GetSize();
|
|
//设置listwnd中的说明数组
|
|
|
|
|
|
m_ListOrg.SetImageList(&m_ListImageOrg, TVSIL_NORMAL);
|
|
m_ListOrg.SetImageList(&m_ListImageOrg, LVSIL_SMALL);
|
|
|
|
for(int i=0; i<iCount; i++)
|
|
{
|
|
//pListWnd->m_sExplains.SetAt(i,"未找到图块说明");
|
|
m_ListOrg.InsertItem(i, strNameArray.GetAt(i), i);
|
|
|
|
}
|
|
m_ListOrg.RedrawWindow();
|
|
|
|
}
|
|
|
|
|
|
void CAddBlockDlg::SetDescList()
|
|
{
|
|
|
|
// 清除所有的图形
|
|
|
|
AcDbDatabase *pDb = NULL;
|
|
AcDbBlockTable *pBlockTable = NULL;
|
|
AcDbBlockTableIterator *pBlkItr = NULL;
|
|
AcDbBlockTableRecord *pBlkTlbRcd=NULL;
|
|
CStringArray strNameArray;
|
|
|
|
// 得到一个DWG文件内部的所有块
|
|
acDocManagerPtr()->lockDocument(curDoc());
|
|
pDb = new AcDbDatabase(Adesk::kFalse);
|
|
Acad :: ErrorStatus res1 = pDb->readDwgFile(m_sDescPath);
|
|
Acad :: ErrorStatus res = pDb->getSymbolTable(pBlockTable, AcDb::kForRead);
|
|
if(res != Acad::eOk)
|
|
{
|
|
acDocManagerPtr()->unlockDocument(curDoc());
|
|
delete pDb;
|
|
return;
|
|
}
|
|
pBlockTable->newIterator(pBlkItr);
|
|
|
|
if(pBlkItr == NULL)
|
|
{
|
|
pBlockTable->close();
|
|
delete pBlkItr;
|
|
delete pDb;
|
|
acDocManagerPtr()->unlockDocument(curDoc());
|
|
return;
|
|
}
|
|
|
|
// 得到内部块的数量
|
|
int iNum = 0;
|
|
for(; !pBlkItr->done(); pBlkItr->step())
|
|
{
|
|
iNum++;
|
|
}
|
|
delete pBlkItr;
|
|
pBlockTable->newIterator(pBlkItr);
|
|
|
|
m_ListImageDesc.Create(32, 32, ILC_MASK, iNum, 0);
|
|
|
|
ACHAR *RcdName;
|
|
iNum=0;
|
|
for(;!pBlkItr->done();pBlkItr->step())
|
|
{
|
|
pBlkItr->getRecord(pBlkTlbRcd,AcDb::kForWrite);
|
|
pBlkTlbRcd->getName(RcdName);
|
|
pBlkTlbRcd->close();
|
|
CString sName=RcdName;
|
|
free(RcdName);
|
|
if(sName.Find(_T("*"))>=0)
|
|
continue;
|
|
// 根据一个内部块,得到对应的ICON
|
|
if(pBlkTlbRcd->hasPreviewIcon())
|
|
{
|
|
AcDbBlockTableRecord::PreviewIcon previewIcon;
|
|
pBlkTlbRcd->getPreviewIcon(previewIcon);
|
|
HANDLE hDib = BaseFuncs::readDibFromMemory((LPVOID)previewIcon.asArrayPtr());
|
|
HBITMAP hBitmap = BaseFuncs::BitmapFromDib(hDib, NULL);
|
|
if(hBitmap)
|
|
{
|
|
m_ListImageDesc.Add(CBitmap::FromHandle(hBitmap), RGB(255, 0, 255));
|
|
::DeleteObject(hBitmap);
|
|
strNameArray.Add(sName);
|
|
}
|
|
if(hDib)
|
|
GlobalFree(hDib);
|
|
}
|
|
else
|
|
{
|
|
HICON hIcon=AfxGetApp()->LoadIcon(IDI_ICON1);
|
|
m_ListImageOrg.Add(hIcon);
|
|
strNameArray.Add(sName);
|
|
}
|
|
}
|
|
pBlockTable->close();
|
|
delete pBlkItr;
|
|
delete pDb;
|
|
acDocManagerPtr()->unlockDocument(curDoc());
|
|
|
|
// 插入到ListCtrl中
|
|
int iCount = (int)strNameArray.GetSize();
|
|
//设置listwnd中的说明数组
|
|
|
|
|
|
m_ListDesc.SetImageList(&m_ListImageDesc, TVSIL_NORMAL);
|
|
m_ListDesc.SetImageList(&m_ListImageDesc, LVSIL_SMALL);
|
|
|
|
for(int i=0; i<iCount; i++)
|
|
{
|
|
|
|
//pListWnd->m_sExplains.SetAt(i,"未找到图块说明");
|
|
m_ListDesc.InsertItem(i, strNameArray.GetAt(i), i);
|
|
// m_ListDesc.SetItemData(i,(DWORD*)strNameArray.GetAt(i));
|
|
|
|
}
|
|
m_ListDesc.RedrawWindow();
|
|
|
|
}
|
|
|
|
BOOL CAddBlockDlg::OnInitDialog()
|
|
{
|
|
CAcUiDialog::OnInitDialog();
|
|
acDocManagerPtr()->lockDocument(curDoc());
|
|
m_pDescDb=new AcDbDatabase(Adesk::kFalse);
|
|
m_pDescDb->readDwgFile(m_sDescPath);
|
|
acDocManagerPtr()->unlockDocument(curDoc());
|
|
// TODO: Add extra initialization here
|
|
SetDescList();
|
|
SetOrgList();
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
BOOL CAddBlockDlg::findTextInListDesc(CString sText)
|
|
{
|
|
int nCount=m_ListDesc.GetItemCount();
|
|
for(int nLen=0;nLen<nCount;nLen++)
|
|
{
|
|
CString sItemText=m_ListDesc.GetItemText(nLen,0);
|
|
if(_tcscmp(sItemText,sText)==0)
|
|
return TRUE;
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
|
|
void CAddBlockDlg::DeleteBlockBtwDwg(CStringArray &sBlockArr)
|
|
{
|
|
// 清除所有的图形
|
|
int nLength=m_ListDesc.GetItemCount()-(int)sBlockArr.GetSize();
|
|
m_ListDesc.DeleteAllItems();
|
|
m_ListImageDesc.DeleteImageList();
|
|
m_ListImageDesc.Create(32, 32, ILC_MASK, nLength, 0);
|
|
acDocManagerPtr()->lockDocument(curDoc());
|
|
CStringArray strNameArray;
|
|
AcDbBlockTableRecord *pDescTblRcd=NULL;
|
|
AcDbBlockTableIterator *pBlkItr=NULL;
|
|
AcDbBlockTable *pDesdTbl;
|
|
if(m_pDescDb->getBlockTable(pDesdTbl,AcDb::kForWrite)!=Acad::eOk)
|
|
{
|
|
acDocManagerPtr()->unlockDocument(curDoc());
|
|
return;
|
|
}
|
|
int nLen=0;
|
|
for( nLen=0;nLen<sBlockArr.GetSize();nLen++)
|
|
{
|
|
if(pDesdTbl->getAt(sBlockArr.GetAt(nLen),pDescTblRcd,AcDb::kForWrite)==Acad::eOk)
|
|
{
|
|
Acad::ErrorStatus es=pDescTblRcd->erase();
|
|
if(es!=Acad::eOk)
|
|
{
|
|
pDescTblRcd->close();
|
|
continue;
|
|
}
|
|
pDescTblRcd=NULL;
|
|
}
|
|
}
|
|
|
|
pDesdTbl->newIterator(pBlkItr);
|
|
|
|
|
|
|
|
ACHAR *RcdName;
|
|
|
|
for(;!pBlkItr->done();pBlkItr->step())
|
|
{
|
|
if(pBlkItr->getRecord(pDescTblRcd,AcDb::kForWrite)!=Acad::eOk)
|
|
continue;
|
|
pDescTblRcd->getName(RcdName);
|
|
|
|
CString sName=RcdName;
|
|
free(RcdName);
|
|
if(sName.Find(_T("*"))>=0)
|
|
continue;
|
|
// 根据一个内部块,得到对应的ICON
|
|
if(pDescTblRcd->hasPreviewIcon())
|
|
{
|
|
AcDbBlockTableRecord::PreviewIcon previewIcon;
|
|
pDescTblRcd->getPreviewIcon(previewIcon);
|
|
HANDLE hDib = BaseFuncs::readDibFromMemory((LPVOID)previewIcon.asArrayPtr());
|
|
HBITMAP hBitmap = BaseFuncs::BitmapFromDib(hDib, NULL);
|
|
if(hBitmap)
|
|
{
|
|
m_ListImageDesc.Add(CBitmap::FromHandle(hBitmap), RGB(255, 0, 255));
|
|
::DeleteObject(hBitmap);
|
|
strNameArray.Add(sName);
|
|
}
|
|
if(hDib)
|
|
GlobalFree(hDib);
|
|
|
|
}
|
|
else
|
|
{
|
|
HICON hIcon=AfxGetApp()->LoadIcon(IDI_ICON1);
|
|
m_ListImageOrg.Add(hIcon);
|
|
strNameArray.Add(sName);
|
|
}
|
|
pDescTblRcd->close();
|
|
}
|
|
delete pBlkItr;
|
|
pDesdTbl->close();
|
|
m_ListDesc.SetImageList(&m_ListImageDesc, TVSIL_NORMAL);
|
|
m_ListDesc.SetImageList(&m_ListImageDesc, LVSIL_SMALL);
|
|
|
|
for(nLen=0;nLen<strNameArray.GetSize();nLen++)
|
|
{
|
|
m_ListDesc.InsertItem(nLen, strNameArray.GetAt(nLen), nLen);
|
|
}
|
|
m_ListDesc.RedrawWindow();
|
|
acDocManagerPtr()->unlockDocument(curDoc());
|
|
}
|
|
|
|
|
|
void CAddBlockDlg::AddOrgListItemToDescList(CListItemArray &itemArr)
|
|
{
|
|
int nCount=m_ListDesc.GetItemCount();
|
|
for(int nLen=0;nLen<itemArr.GetSize();nLen++)
|
|
{
|
|
CListItem item=itemArr.GetAt(nLen);
|
|
int nImage=m_ListImageDesc.Add(item.m_hIcon);
|
|
m_ListDesc.InsertItem(nLen+nCount, item.m_strName, nImage);
|
|
}
|
|
m_ListDesc.RedrawWindow();
|
|
}
|
|
|
|
BOOL CAddBlockDlg::InsertBlockToDesc(CString sDwgPath,CListItemArray &itemArr)
|
|
{
|
|
CString sCommand;
|
|
AcDbObjectId RcdId;
|
|
AcDbBlockTable *pBlokTable;
|
|
AcDbObjectIdArray BlcokIds;
|
|
AcDbBlockTableRecord *pBlkTblRcd=NULL;
|
|
AcDbDatabase *pDb=NULL;
|
|
acDocManager->lockDocument(curDoc());
|
|
if(m_bAddCur)
|
|
{
|
|
pDb=acdbHostApplicationServices()->workingDatabase();
|
|
}
|
|
else
|
|
{
|
|
pDb=new AcDbDatabase(Adesk::kFalse);
|
|
pDb->readDwgFile(sDwgPath);
|
|
}
|
|
|
|
if(pDb->getBlockTable(pBlokTable,AcDb::kForRead)==Acad::eOk)
|
|
{
|
|
for(int nLen=0;nLen<itemArr.GetSize();nLen++)
|
|
{
|
|
CListItem item=itemArr.GetAt(nLen);
|
|
#if ARX > 24
|
|
if(pBlokTable->getAt(item.m_strName,RcdId)==Acad::eOk)
|
|
#else
|
|
if(pBlokTable->getAt(item.m_strName,RcdId,AcDb::kForRead)==Acad::eOk)
|
|
#endif
|
|
{
|
|
BlcokIds.append(RcdId);
|
|
}
|
|
else
|
|
{
|
|
itemArr.RemoveAt(nLen);
|
|
nLen--;
|
|
}
|
|
}
|
|
pBlokTable->close();
|
|
}
|
|
|
|
for( int nLen=0;nLen<BlcokIds.logicalLength();nLen++)
|
|
{
|
|
CListItem item=itemArr.GetAt(nLen);
|
|
AcDbDatabase *pInsertDb=new AcDbDatabase;
|
|
if(pDb->wblock(pInsertDb,BlcokIds[nLen])==Acad::eOk)
|
|
{
|
|
Acad::ErrorStatus es=m_pDescDb->insert(RcdId,item.m_strName,pInsertDb);
|
|
AcDbBlockTableRecord *pRcd=NULL;
|
|
BOOL bHasIcon=FALSE;
|
|
|
|
AcDbBlockTableRecord::PreviewIcon vieIcon;
|
|
if(acdbOpenObject(pRcd,RcdId,AcDb::kForWrite)==Acad::eOk)
|
|
{
|
|
if(!pRcd->hasPreviewIcon()) //没有icon
|
|
{
|
|
// pRcd->setPreviewIcon( vieIcon);
|
|
bHasIcon=pRcd->hasPreviewIcon();
|
|
}
|
|
pRcd->close();
|
|
pRcd=NULL;
|
|
}
|
|
}
|
|
delete pInsertDb;
|
|
}
|
|
if(!m_bAddCur)
|
|
delete pDb;
|
|
acDocManager->unlockDocument(curDoc());
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
BOOL CAddBlockDlg::ClearAcadCmdLine()
|
|
{
|
|
HWND hAcadDocWnd=adsw_acadDocWnd();
|
|
if (hAcadDocWnd == NULL)
|
|
return false;
|
|
|
|
::SendMessage(hAcadDocWnd, WM_CHAR, VK_ESCAPE, 0);
|
|
::SendMessage(hAcadDocWnd, WM_CHAR, VK_ESCAPE, 0);
|
|
|
|
acedPostCommandPrompt();
|
|
return true;
|
|
}
|
|
|
|
|
|
void CAddBlockDlg::OnInsertbtn()
|
|
{
|
|
// TODO: Add your control notification handler code here
|
|
CString sBlockName;
|
|
POSITION pos = m_ListOrg.GetFirstSelectedItemPosition();
|
|
if (pos == NULL)
|
|
TRACE0(_T("No items were selected!\n"));
|
|
else
|
|
{
|
|
CListItemArray itemArr;
|
|
CStringArray sBlockArr;
|
|
while (pos)
|
|
{
|
|
CListItem item;
|
|
int nItem = m_ListOrg.GetNextSelectedItem(pos);
|
|
sBlockName=m_ListOrg.GetItemText(nItem,0);
|
|
|
|
LVITEM rItem;
|
|
ZeroMemory ( &rItem, sizeof(LVITEM) );
|
|
rItem.mask = LVIF_IMAGE | LVIF_STATE;//LVIF_STATE,状态
|
|
rItem.iItem = nItem;
|
|
rItem.stateMask = LVIS_SELECTED;
|
|
m_ListOrg.GetItem ( &rItem );
|
|
|
|
sBlockArr.Add(sBlockName);
|
|
HICON hIcon=m_ListImageOrg.ExtractIcon(rItem.iImage);
|
|
item.m_strName=sBlockName;
|
|
item.m_hIcon=hIcon;
|
|
itemArr.Add(item);
|
|
m_itemArr.Add(item);
|
|
}
|
|
AddOrgListItemToDescList(itemArr);
|
|
}
|
|
}
|
|
|
|
|
|
void CAddBlockDlg::OnDeletebtn()
|
|
{
|
|
CString sBlockName;
|
|
POSITION pos = m_ListDesc.GetFirstSelectedItemPosition();
|
|
if (pos == NULL)
|
|
TRACE0(_T("No items were selected!\n"));
|
|
else
|
|
{
|
|
CStringArray sBlockArr;
|
|
while (pos)
|
|
{
|
|
int nItem = m_ListDesc.GetNextSelectedItem(pos);
|
|
sBlockName=m_ListDesc.GetItemText(nItem,0);
|
|
sBlockArr.Add(sBlockName);
|
|
|
|
// m_ListDesc.DeleteItem(nItem);
|
|
}
|
|
DeleteBlockBtwDwg(sBlockArr);
|
|
|
|
m_ListDesc.RedrawWindow();
|
|
}
|
|
}
|
|
|
|
|
|
void CAddBlockDlg::OnBdeleteallbtn()
|
|
{
|
|
CStringArray sItemArray;
|
|
// TODO: Add your control notification handler code here
|
|
int nCount=m_ListOrg.GetItemCount();
|
|
CListItemArray itemArr;
|
|
CListItem item;
|
|
for(int nLen=0;nLen<nCount;nLen++)
|
|
{
|
|
LVITEM rItem;
|
|
ZeroMemory ( &rItem, sizeof(LVITEM) );
|
|
rItem.mask = LVIF_IMAGE | LVIF_STATE;//LVIF_STATE,状态
|
|
rItem.iItem = nLen;
|
|
rItem.stateMask = LVIS_SELECTED;
|
|
m_ListOrg.GetItem ( &rItem );
|
|
|
|
HICON hIcon=m_ListImageOrg.ExtractIcon(rItem.iImage);
|
|
item.m_strName=m_ListOrg.GetItemText(nLen,0);
|
|
item.m_hIcon=hIcon;
|
|
itemArr.Add(item);
|
|
m_itemArr.Add(item);
|
|
}
|
|
AddOrgListItemToDescList(itemArr);
|
|
}
|
|
|
|
|
|
void CAddBlockDlg::OnSize(UINT nType, int cx, int cy)
|
|
{
|
|
CAcUiDialog::OnSize(nType, cx, cy);
|
|
|
|
double dHDelta=5;
|
|
double dWDelta=5;
|
|
double dBtnWidth;
|
|
double dBtnHeight;
|
|
CRect BtnRect;
|
|
CRect OrgRect;
|
|
CRect DescRect;
|
|
CRect InsertRect;
|
|
CRect DeleteRect;
|
|
CRect AllIstRect;
|
|
CRect RenameRect;
|
|
CRect OkRect;
|
|
CRect CleRect;
|
|
CRect ClientRect;
|
|
GetClientRect(ClientRect);
|
|
ClientRect.DeflateRect(8,8,8,8);
|
|
CWnd *pWnd=(CWnd*)GetDlgItem(IDC_INSERTBTN);
|
|
if(pWnd==NULL)
|
|
return;
|
|
GetDlgItem(IDC_INSERTBTN)->GetWindowRect(BtnRect);
|
|
InsertRect=BtnRect;
|
|
dBtnWidth=BtnRect.Width();
|
|
dBtnHeight=BtnRect.Height();
|
|
//
|
|
GetDlgItem(IDC_LISTORG)->GetWindowRect(OrgRect);
|
|
OrgRect.bottom=(LONG)(ClientRect.bottom-dBtnHeight-dHDelta); //设置底步
|
|
OrgRect.left=ClientRect.left;
|
|
OrgRect.top=ClientRect.top;
|
|
OrgRect.right=(LONG)(OrgRect.left+ClientRect.Width()/2-dBtnWidth/2-dWDelta);
|
|
GetDlgItem(IDC_LISTORG)->MoveWindow(OrgRect);
|
|
|
|
//
|
|
GetDlgItem(IDC_LISTDESC)->GetWindowRect(DescRect);
|
|
DescRect.bottom=(LONG)(ClientRect.bottom-dBtnHeight-dHDelta); //设置底步
|
|
DescRect.top=ClientRect.top;
|
|
DescRect.right=ClientRect.right;
|
|
DescRect.left=DescRect.right-OrgRect.Width();
|
|
GetDlgItem(IDC_LISTDESC)->MoveWindow(DescRect);
|
|
|
|
//
|
|
GetDlgItem(IDC_INSERTBTN)->GetWindowRect(InsertRect);
|
|
InsertRect.left=(LONG)(OrgRect.right+dWDelta);//ClientRect.Width()/2-dBtnWidth/2;
|
|
InsertRect.right=(LONG)(InsertRect.left+dBtnWidth);
|
|
InsertRect.top=ClientRect.Height()/5;
|
|
InsertRect.bottom=(LONG)(InsertRect.top+dBtnHeight);
|
|
GetDlgItem(IDC_INSERTBTN)->MoveWindow(InsertRect);
|
|
|
|
//
|
|
DeleteRect=InsertRect;
|
|
DeleteRect.top+=ClientRect.Height()/5;
|
|
DeleteRect.bottom+=ClientRect.Height()/5;
|
|
GetDlgItem(IDC_DELETEBTN)->MoveWindow(DeleteRect);
|
|
|
|
//
|
|
AllIstRect=DeleteRect;
|
|
AllIstRect.top+=ClientRect.Height()/5;
|
|
AllIstRect.bottom+=ClientRect.Height()/5;
|
|
GetDlgItem(IDC_BDELETEALLBTN)->MoveWindow(AllIstRect);
|
|
|
|
//
|
|
RenameRect=AllIstRect;
|
|
RenameRect.top+=ClientRect.Height()/5;
|
|
RenameRect.bottom+=ClientRect.Height()/5;
|
|
GetDlgItem(IDC_BDRENAME)->MoveWindow(RenameRect);
|
|
|
|
//ok
|
|
OkRect.right=OrgRect.right;
|
|
OkRect.left=(LONG)(OkRect.right-dBtnWidth);
|
|
OkRect.bottom=ClientRect.bottom;
|
|
OkRect.top=(LONG)(OkRect.bottom-dBtnHeight);
|
|
GetDlgItem(IDOK)->MoveWindow(OkRect);
|
|
|
|
//cancle
|
|
CleRect.left=DescRect.left;
|
|
CleRect.right=(LONG)(CleRect.left+dBtnWidth);
|
|
|
|
CleRect.bottom=ClientRect.bottom;
|
|
CleRect.top=(LONG)(CleRect.bottom-dBtnHeight);
|
|
GetDlgItem(IDCANCEL)->MoveWindow(CleRect);
|
|
|
|
|
|
|
|
|
|
}
|
|
void CAddBlockDlg::OnBdrename()
|
|
{
|
|
// TODO: Add your control notification handler code here
|
|
CString sOldBldName;
|
|
POSITION pos = m_ListDesc.GetFirstSelectedItemPosition();
|
|
if (pos == NULL)
|
|
TRACE0(_T("No items were selected!\n"));
|
|
int nItem = m_ListDesc.GetNextSelectedItem(pos);
|
|
sOldBldName=m_ListDesc.GetItemText(nItem,0);
|
|
|
|
CRnameBlkDlg dlg;
|
|
dlg.m_sOldBlkName=sOldBldName;
|
|
if(dlg.DoModal()!=IDOK)
|
|
return;
|
|
|
|
CString sNewBlkName=dlg.m_sNewBlockName;
|
|
if(BaseFuncs::RenameBlock(m_pDescDb,sOldBldName,sNewBlkName))
|
|
m_ListDesc.SetItemText(nItem,0,sNewBlkName);
|
|
|
|
}
|