981 lines
25 KiB
C++
981 lines
25 KiB
C++
#include "StdAfx.h"
|
|
#include "resource.h"
|
|
#include "DockDialog.h"
|
|
#include "ChildFrame.h"
|
|
#include "MyListView.h"
|
|
#include "dbsymtb.h "
|
|
#include "AddBlockDlg.h"
|
|
#ifdef _DEBUG
|
|
#define new DEBUG_NEW
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
CDockDialog::CDockDialog(CWnd *pParent /*=NULL*/, HINSTANCE hInstance /*=NULL*/)
|
|
: CAcUiDialog(CDockDialog::IDD, pParent, hInstance)
|
|
{
|
|
//{{AFX_DATA_INIT(CDockDialog)
|
|
m_pMyFrame = NULL;
|
|
//}}AFX_DATA_INIT
|
|
m_nCurrentPos = 0;
|
|
m_bFirst = FALSE;
|
|
m_bFouth = TRUE;
|
|
m_bSecond = TRUE;
|
|
m_bThree = TRUE;
|
|
m_bCurDb = FALSE;
|
|
// 加载文件类型BMP
|
|
}
|
|
|
|
|
|
void CDockDialog::DoDataExchange(CDataExchange *pDX)
|
|
{
|
|
CAcUiDialog::DoDataExchange(pDX);
|
|
//{{AFX_DATA_MAP(CDockDialog)
|
|
//}}AFX_DATA_MAP
|
|
}
|
|
|
|
|
|
BEGIN_MESSAGE_MAP(CDockDialog, CAcUiDialog)
|
|
//{{AFX_MSG_MAP(CDockDialog)
|
|
ON_WM_CREATE()
|
|
ON_WM_SIZE()
|
|
ON_WM_DESTROY()
|
|
ON_NOTIFY_EX(TTN_NEEDTEXT, 0, OnToolTipText)
|
|
ON_NOTIFY(TBN_DROPDOWN, AFX_IDW_TOOLBAR, OnDropDown)
|
|
ON_WM_INITMENUPOPUP()
|
|
|
|
ON_COMMAND(ID_BUTTONFIRST, OnButtonfirst)
|
|
ON_COMMAND(ID_BUTTONSECOND, OnButtonsecond)
|
|
ON_COMMAND(ID_BUTTONTREE, OnButtontree)
|
|
ON_COMMAND(ID_BUTTONFOUR, OnButtonfour)
|
|
ON_COMMAND(ID_BUTTONFIVE, OnButtonfive)
|
|
ON_COMMAND(ID_BUTTONSIX, OnButtonsix)
|
|
ON_COMMAND(ID_BLOCKINSERT, OnInSertBlock)
|
|
ON_UPDATE_COMMAND_UI(ID_BLOCKINSERT, OnUpdateBlockInsert)
|
|
|
|
|
|
ON_COMMAND(ID_BLOCKINSTEAD, OnBlockInstead)
|
|
ON_UPDATE_COMMAND_UI(ID_BLOCKINSTEAD, OnUpdateBlockInstead)
|
|
|
|
ON_COMMAND(ID_BLOCKDEL, OnBlockDel)
|
|
|
|
ON_UPDATE_COMMAND_UI(ID_BLOCKDEL, OnUpdateBlockDel)
|
|
ON_COMMAND(ID_SELECTALL, OnSelectAll)
|
|
ON_UPDATE_COMMAND_UI(ID_SELECTALL, OnUpdateSelectAll)
|
|
|
|
ON_COMMAND(ID_BLOCKSET, OnBlockSet)
|
|
ON_UPDATE_COMMAND_UI(ID_BLOCKSET, OnUpdateBlockSet)
|
|
|
|
ON_UPDATE_COMMAND_UI(ID_BUTTONFIRST, OnUpdateButtonfirst)
|
|
ON_UPDATE_COMMAND_UI(ID_BUTTONSECOND, OnUpdateButtonsecond)
|
|
ON_UPDATE_COMMAND_UI(ID_BUTTONTREE, OnUpdateButtontree)
|
|
ON_UPDATE_COMMAND_UI(ID_BUTTONFOUR, OnUpdateButtonfour)
|
|
ON_UPDATE_COMMAND_UI(ID_BUTTONFIVE, OnUpdateButtonfive)
|
|
ON_UPDATE_COMMAND_UI(ID_BUTTONSIX, OnUpdateButtonsix)
|
|
|
|
ON_COMMAND(ID_MENUITEMFIRST, OnBigIcon)
|
|
ON_COMMAND(ID_MENUITEMSECOND, OnSmallIcon)
|
|
ON_COMMAND(ID_MENUITEMTREE, OnListIcon)
|
|
ON_COMMAND(ID_MENUITEMFOUR, OnReportIcon)
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CDockDialog message handlers
|
|
/*
|
|
BOOL CDockDialog::PreTranslateMessage(MSG* pMsg)
|
|
{
|
|
m_wndToolBar.SendMessage(WM_IDLEUPDATECMDUI, (WPARAM)TRUE, 0L); //modify by hrp
|
|
return CAcUiDialog::PreTranslateMessage(pMsg);
|
|
}*/
|
|
void CDockDialog::OnUpdateBlockInsert(CCmdUI *pCmdUI)
|
|
{
|
|
|
|
if (getListCtrl().GetSelectedCount()>0)
|
|
pCmdUI->Enable(TRUE);
|
|
else
|
|
pCmdUI->Enable(FALSE);
|
|
}
|
|
void CDockDialog::OnUpdateBlockInstead(CCmdUI *pCmdUI)
|
|
{
|
|
|
|
if (getListCtrl().GetSelectedCount()>0)
|
|
pCmdUI->Enable(TRUE);
|
|
else
|
|
pCmdUI->Enable(FALSE);
|
|
}
|
|
void CDockDialog::OnUpdateBlockDel(CCmdUI *pCmdUI)
|
|
{
|
|
if (getListCtrl().GetSelectedCount()>0)
|
|
pCmdUI->Enable(TRUE);
|
|
else
|
|
pCmdUI->Enable(FALSE);
|
|
}
|
|
|
|
void CDockDialog::OnUpdateBlockSet(CCmdUI *pCmdUI)
|
|
{
|
|
if (getListCtrl().GetSelectedCount()>0)
|
|
pCmdUI->Enable(TRUE);
|
|
else
|
|
pCmdUI->Enable(FALSE);
|
|
}
|
|
void CDockDialog::OnUpdateSelectAll(CCmdUI *pCmdUI)
|
|
{
|
|
pCmdUI->Enable(TRUE);
|
|
}
|
|
|
|
void CDockDialog::OnBlockInstead()
|
|
{
|
|
CMainFrame *pMain = m_pMyFrame;
|
|
CWnd *pWnd = (m_pMyFrame->m_wndSplitter).GetPane(0, 0);
|
|
CChildFrame *pChild = ((CChildFrame *)((m_pMyFrame->m_wndSplitter).GetPane(0, 0)));
|
|
CMyListView *pListView = (CMyListView *)(pChild->m_wndSplitter.GetPane(0, 0));
|
|
pListView->BlockInstead();
|
|
}
|
|
void CDockDialog::OnBlockDel()
|
|
{
|
|
CMainFrame *pMain = m_pMyFrame;
|
|
CWnd *pWnd = (m_pMyFrame->m_wndSplitter).GetPane(0, 0);
|
|
CChildFrame *pChild = ((CChildFrame *)((m_pMyFrame->m_wndSplitter).GetPane(0, 0)));
|
|
CMyListView *pListView = (CMyListView *)(pChild->m_wndSplitter.GetPane(0, 0));
|
|
pListView->DeleteBlock();
|
|
//pListView->BlockInstead();
|
|
}
|
|
|
|
void CDockDialog::OnBlockSet()
|
|
{
|
|
CMainFrame *pMain = m_pMyFrame;
|
|
CWnd *pWnd = (m_pMyFrame->m_wndSplitter).GetPane(0, 0);
|
|
CChildFrame *pChild = ((CChildFrame *)((m_pMyFrame->m_wndSplitter).GetPane(0, 0)));
|
|
CMyListView *pListView = (CMyListView *)(pChild->m_wndSplitter.GetPane(0, 0));
|
|
pListView->SetBlockCommand();
|
|
//pListView->BlockInstead();
|
|
}
|
|
void CDockDialog::OnSelectAll()
|
|
{
|
|
CMainFrame *pMain = m_pMyFrame;
|
|
CWnd *pWnd = (m_pMyFrame->m_wndSplitter).GetPane(0, 0);
|
|
CChildFrame *pChild = ((CChildFrame *)((m_pMyFrame->m_wndSplitter).GetPane(0, 0)));
|
|
CMyListView *pListView = (CMyListView *)(pChild->m_wndSplitter.GetPane(0, 0));
|
|
pListView->SelectAll();
|
|
}
|
|
void CDockDialog::OnInSertBlock()
|
|
{
|
|
|
|
CMainFrame *pMain = m_pMyFrame;
|
|
CWnd *pWnd = (m_pMyFrame->m_wndSplitter).GetPane(0, 0);
|
|
CChildFrame *pChild = ((CChildFrame *)((m_pMyFrame->m_wndSplitter).GetPane(0, 0)));
|
|
CMyListView *pListView = (CMyListView *)(pChild->m_wndSplitter.GetPane(0, 0));
|
|
pListView->InSertBlock();
|
|
}
|
|
|
|
BOOL CDockDialog::OnInitDialog()
|
|
{
|
|
CAcUiDialog::OnInitDialog();
|
|
|
|
AfxSetResourceHandle(_hdllInstance);
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// 工具条
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// 增加工具条功能
|
|
if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP |
|
|
CBRS_TOOLTIPS | CBRS_FLYBY|CBRS_SIZE_DYNAMIC, CRect(0, 2, 0, 0)) ||
|
|
!m_wndToolBar.LoadToolBar(IDR_DOCKTOOLBAR))
|
|
{
|
|
TRACE0(_T("未能创建工具栏\n"));
|
|
return -1;
|
|
}
|
|
m_wndToolBar.ShowWindow(SW_SHOW);
|
|
|
|
// 修改工具条为下拉样式
|
|
m_wndToolBar.GetToolBarCtrl().SetExtendedStyle(TBSTYLE_EX_DRAWDDARROWS);
|
|
int i = m_wndToolBar.CommandToIndex(ID_BUTTONSIX);
|
|
UINT id, style;
|
|
int image;
|
|
m_wndToolBar.GetButtonInfo(i, id, style, image);
|
|
// m_wndToolBar.SetButtonInfo(i,id,TBSTYLE_DROPDOWN,image);
|
|
|
|
AfxSetResourceHandle(acedGetAcadResourceInstance());
|
|
|
|
// 重排对话框中控件位置
|
|
CRect rcClientStart;
|
|
CRect rcClientNow;
|
|
GetClientRect(rcClientStart);
|
|
RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST,
|
|
0, reposQuery, rcClientNow);
|
|
|
|
CPoint ptOffset(rcClientNow.left - rcClientStart.left,
|
|
rcClientNow.top - rcClientStart.top);
|
|
CRect rcChild;
|
|
CWnd *pwndChild = GetWindow(GW_CHILD);
|
|
while (pwndChild)
|
|
{
|
|
pwndChild->GetWindowRect(rcChild);
|
|
ScreenToClient(rcChild);
|
|
rcChild.OffsetRect(ptOffset);
|
|
pwndChild->MoveWindow(rcChild, FALSE);
|
|
pwndChild = pwndChild->GetNextWindow();
|
|
}
|
|
|
|
// 对齐对话框
|
|
CRect rcWindow;
|
|
GetWindowRect(rcWindow);
|
|
rcWindow.right += rcClientStart.Width() - rcClientNow.Width();
|
|
rcWindow.bottom += rcClientStart.Height() - rcClientNow.Height();
|
|
MoveWindow(rcWindow, FALSE);
|
|
|
|
// 将工具条加到对话框中
|
|
RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, 0);
|
|
|
|
///////////////////////
|
|
CRect rect;
|
|
getListCtrl().GetClientRect(&rect);
|
|
getListCtrl().InsertColumn(0, _T(""), LVCFMT_LEFT, rect.right / 2, -1);
|
|
// 得到软件的安装路径
|
|
BaseFuncs::GetPathName(m_sPathName);
|
|
m_sDirPath = m_sPathName;
|
|
|
|
HBITMAP hBit = ::LoadBitmap(_hdllInstance, MAKEINTRESOURCE(IDB_FILETYPE16));
|
|
|
|
if (hBit != NULL)
|
|
m_FileTypeBMP.Attach(hBit);
|
|
else
|
|
acutPrintf(_T("\n没有找到指定的FileType16X16.bmp文件!"));
|
|
|
|
// 添加列表数据
|
|
AddItemToTreeCtrl();
|
|
/* long nStyle;
|
|
if(getListCtrl().m_hWnd!=NULL)
|
|
{
|
|
nStyle=GetWindowLong(getListCtrl().m_hWnd,GWL_STYLE );
|
|
SetWindowLong(getListCtrl().m_hWnd,GWL_STYLE,nStyle|LVS_AUTOARRANGE);
|
|
}*/
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
int CDockDialog::OnCreate(LPCREATESTRUCT lpCreateStruct)
|
|
{
|
|
if (CAcUiDialog::OnCreate(lpCreateStruct) == -1)
|
|
return -1;
|
|
|
|
CString strMyClass = AfxRegisterWndClass(CS_VREDRAW |
|
|
CS_HREDRAW,
|
|
::LoadCursor(NULL, IDC_ARROW),
|
|
(HBRUSH) ::GetStockObject(WHITE_BRUSH),
|
|
::LoadIcon(NULL, IDI_APPLICATION));
|
|
m_pMyFrame = new CMainFrame();
|
|
m_pMyFrame->Create(strMyClass, _T(""), WS_CHILD, CRect(0, 0, 1, 1), this);
|
|
m_pMyFrame->ShowWindow(SW_SHOW);
|
|
m_pMyFrame->MoveWindow(0, 0, 300, 300);
|
|
|
|
return 0;
|
|
}
|
|
|
|
|
|
void CDockDialog::OnSize(UINT nType, int cx, int cy)
|
|
{
|
|
CAcUiDialog::OnSize(nType, cx, cy);
|
|
|
|
|
|
if (GetDlgItem(IDC_STATIC1) == NULL)
|
|
return;
|
|
CRect cConRect, cDiaRect;
|
|
GetWindowRect(&cDiaRect);
|
|
GetDlgItem(IDC_STATIC1)->GetWindowRect(&cConRect);
|
|
|
|
ScreenToClient(&cConRect);
|
|
ScreenToClient(&cDiaRect);
|
|
cConRect.left = cConRect.left-2;
|
|
cConRect.bottom = cDiaRect.bottom;
|
|
cConRect.right = cDiaRect.right+2;
|
|
m_pMyFrame->MoveWindow(&cConRect, FALSE);
|
|
|
|
}
|
|
|
|
|
|
void CDockDialog::OnDestroy()
|
|
{
|
|
CAcUiDialog::OnDestroy();
|
|
|
|
if (m_pMyFrame)
|
|
{
|
|
m_pMyFrame->DestroyWindow();
|
|
m_pMyFrame = NULL;
|
|
}
|
|
|
|
}
|
|
|
|
BOOL CDockDialog::OnCommand(WPARAM wParam, LPARAM lParam)
|
|
{
|
|
switch (wParam)
|
|
{
|
|
case IDOK:
|
|
case IDCANCEL:
|
|
return (FALSE);
|
|
}
|
|
|
|
return CAcUiDialog::OnCommand(wParam, lParam);
|
|
}
|
|
//////////////////////////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
// 插入块 1
|
|
void CDockDialog::OnButtonfirst()
|
|
{
|
|
SetState();
|
|
m_nCurrentPos = 0;
|
|
getTreeCtrl().DeleteAllItems();
|
|
getListCtrl().DeleteAllItems();
|
|
getPreviewCtrl().mpView->eraseAll();
|
|
// getPreviewCtrl().mpDevice->setBackgroundColor(g_BlkViewClr);
|
|
getPreviewCtrl().mpView->update();
|
|
HTREEITEM hParentItem;
|
|
hParentItem = getTreeCtrl().InsertItem(m_sIniArr[m_nCurrentPos], _ttoi(m_sIniBigIcon[m_nCurrentPos]), _ttoi(m_sIniSmlIcon[m_nCurrentPos]));
|
|
|
|
//modify by hrp
|
|
CString sIniName = m_sPathName + _T("\\tk\\Customer\\图库中心\\")+m_sIniArr[m_nCurrentPos];
|
|
ViewIni(hParentItem, sIniName);
|
|
getTreeCtrl().Expand(hParentItem, TVE_TOGGLE);
|
|
|
|
return;
|
|
}
|
|
|
|
|
|
void CDockDialog::OnUpdateButtonfirst(CCmdUI *pCmdUI)
|
|
{
|
|
pCmdUI->Enable(m_bFirst);
|
|
// pCmdUI->SetCheck(m_bFirst);
|
|
}
|
|
void CDockDialog::SetState()
|
|
{
|
|
m_bFirst = !m_bFirst;
|
|
m_bSecond = !m_bSecond;
|
|
}
|
|
// 文件视图 2
|
|
void CDockDialog::OnButtonsecond()
|
|
{
|
|
SetState();
|
|
|
|
m_nCurrentPos = 1;
|
|
getTreeCtrl().DeleteAllItems();
|
|
getListCtrl().DeleteAllItems();
|
|
getPreviewCtrl().mpView->eraseAll();
|
|
// getPreviewCtrl().mpDevice->setBackgroundColor(g_BlkViewClr);
|
|
getPreviewCtrl().mpView->update();
|
|
HTREEITEM hParentItem;
|
|
hParentItem = getTreeCtrl().InsertItem(m_sIniArr[m_nCurrentPos], _ttoi(m_sIniBigIcon[m_nCurrentPos]), _ttoi(m_sIniSmlIcon[m_nCurrentPos]));
|
|
|
|
//modify by hrp
|
|
CString sIniName = m_sPathName + _T("\\tk\\Customer\\图库中心\\")+m_sIniArr[m_nCurrentPos];
|
|
ViewIni(hParentItem, sIniName);
|
|
getTreeCtrl().Expand(hParentItem, TVE_TOGGLE);
|
|
}
|
|
|
|
void CDockDialog::OnUpdateButtonsecond(CCmdUI *pCmdUI)
|
|
{
|
|
pCmdUI->Enable(m_bSecond);
|
|
// pCmdUI->SetCheck(m_bSecond);
|
|
}
|
|
|
|
// 插入图案 3
|
|
void CDockDialog::OnButtontree()
|
|
{
|
|
m_pMyFrame->ShowListDock();
|
|
}
|
|
|
|
void CDockDialog::OnUpdateButtontree(CCmdUI *pCmdUI)
|
|
{
|
|
pCmdUI->SetCheck(m_pMyFrame->IsShowListDock());
|
|
}
|
|
|
|
// 显示预览 4
|
|
void CDockDialog::OnButtonfour()
|
|
{
|
|
m_pMyFrame->ShowPreViewCtrl();
|
|
}
|
|
|
|
void CDockDialog::OnUpdateButtonfour(CCmdUI *pCmdUI)
|
|
{
|
|
pCmdUI->SetCheck(m_pMyFrame->IsShowPreViewCtrl());
|
|
}
|
|
// 显示说明 5
|
|
void CDockDialog::OnButtonfive()
|
|
{
|
|
m_pMyFrame->ShowExplainCtrl();
|
|
}
|
|
|
|
void CDockDialog::OnUpdateButtonfive(CCmdUI *pCmdUI)
|
|
{
|
|
pCmdUI->SetCheck(m_pMyFrame->IsShowExplainCtrl());
|
|
}
|
|
|
|
// 显示方式 6
|
|
void CDockDialog::OnButtonsix()
|
|
{
|
|
}
|
|
|
|
void CDockDialog::OnUpdateButtonsix(CCmdUI *pCmdUI)
|
|
{
|
|
}
|
|
|
|
|
|
//工具栏提示
|
|
BOOL CDockDialog::OnToolTipText(UINT, NMHDR *pNMHDR, LRESULT *pResult)
|
|
{
|
|
CAcModuleResourceOverride res;
|
|
|
|
ASSERT(pNMHDR->code == TTN_NEEDTEXTA || pNMHDR->code == TTN_NEEDTEXTW);
|
|
|
|
// UNICODE消息
|
|
TOOLTIPTEXTA *pTTTA = (TOOLTIPTEXTA *)pNMHDR;
|
|
TOOLTIPTEXTW *pTTTW = (TOOLTIPTEXTW *)pNMHDR;
|
|
//TCHAR szFullText[512];
|
|
CString strTipText;
|
|
CString strStatusText;
|
|
UINT nID = (UINT)pNMHDR->idFrom;
|
|
|
|
if (pNMHDR->code == TTN_NEEDTEXTA && (pTTTA->uFlags & TTF_IDISHWND) ||
|
|
pNMHDR->code == TTN_NEEDTEXTW && (pTTTW->uFlags & TTF_IDISHWND))
|
|
{
|
|
// idFrom为工具条的HWND
|
|
nID = ::GetDlgCtrlID((HWND)nID);
|
|
}
|
|
|
|
if (nID != 0) //不为分隔符
|
|
{
|
|
strTipText.LoadString(nID);
|
|
// 得到提示的文字
|
|
strTipText = strTipText.Mid(strTipText.Find('\n', 0)+1);
|
|
|
|
#ifndef _UNICODE
|
|
if (pNMHDR->code == TTN_NEEDTEXTA)
|
|
{
|
|
lstrcpyn(pTTTA->szText, strTipText, sizeof(pTTTA->szText));
|
|
}
|
|
else
|
|
{
|
|
_mbstowcsz(pTTTW->szText, strTipText, sizeof(pTTTW->szText));
|
|
}
|
|
#else
|
|
if (pNMHDR->code == TTN_NEEDTEXTA)
|
|
{
|
|
_wcstombsz(pTTTA->szText, strTipText, sizeof(pTTTA->szText));
|
|
}
|
|
else
|
|
{
|
|
lstrcpyn(pTTTW->szText, strTipText, sizeof(pTTTW->szText));
|
|
}
|
|
#endif
|
|
|
|
*pResult = 0;
|
|
|
|
// 使工具条提示窗口在最上面
|
|
::SetWindowPos(pNMHDR->hwndFrom, HWND_TOP, 0, 0, 0, 0, SWP_NOACTIVATE|
|
|
SWP_NOSIZE|SWP_NOMOVE|SWP_NOOWNERZORDER);
|
|
return TRUE;
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
// 工具条下拉消息
|
|
void CDockDialog::OnDropDown(NMHDR *pNotifyStruct, LRESULT *result)
|
|
{
|
|
CWnd *pWnd;
|
|
UINT nID;
|
|
|
|
NMTOOLBAR *pInfo = (NMTOOLBAR *)pNotifyStruct;
|
|
switch (pInfo->iItem)
|
|
{
|
|
case ID_BUTTONSIX:
|
|
pWnd = &m_wndToolBar;
|
|
nID = IDR_MENU1;
|
|
break;
|
|
default:
|
|
return;
|
|
}
|
|
CString sParentText = getTreeCtrl().m_sCurParentText;
|
|
|
|
// load and display popup menu
|
|
CPoint point;
|
|
GetCursorPos(&point);
|
|
CMenu menu;
|
|
menu.LoadMenu(nID);
|
|
menu.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN, point.x, point.y, this);
|
|
|
|
}
|
|
|
|
// 更新下拉菜单
|
|
void CDockDialog::OnInitMenuPopup(CMenu *pPopupMenu, UINT nIndex, BOOL bSysMenu)
|
|
{
|
|
|
|
if (!bSysMenu)
|
|
{
|
|
ASSERT(pPopupMenu != NULL);
|
|
|
|
// check the enabled state of various menu items
|
|
CCmdUI state;
|
|
state.m_pMenu = pPopupMenu;
|
|
ASSERT(state.m_pOther == NULL);
|
|
|
|
state.m_nIndexMax = pPopupMenu->GetMenuItemCount();
|
|
for (state.m_nIndex = 0; state.m_nIndex < state.m_nIndexMax;
|
|
state.m_nIndex++)
|
|
{
|
|
state.m_nID = pPopupMenu->GetMenuItemID(state.m_nIndex);
|
|
if (state.m_nID == 0)
|
|
continue; // menu separator or invalid cmd - ignore it
|
|
|
|
ASSERT(state.m_pOther == NULL);
|
|
ASSERT(state.m_pMenu != NULL);
|
|
if (state.m_nID == (UINT)-1)
|
|
{
|
|
// possibly a popup menu, route to first item of that popup
|
|
state.m_pSubMenu = pPopupMenu->GetSubMenu(state.m_nIndex);
|
|
if (state.m_pSubMenu == NULL ||
|
|
(state.m_nID = state.m_pSubMenu->GetMenuItemID(0)) == 0 ||
|
|
state.m_nID == (UINT)-1)
|
|
{
|
|
continue; // first item of popup can't be routed to
|
|
}
|
|
state.DoUpdate(this, FALSE); // popups are never auto disabled
|
|
}
|
|
else
|
|
{
|
|
// normal menu item
|
|
// Auto enable/disable if command is _not_ a system command
|
|
state.m_pSubMenu = NULL;
|
|
state.DoUpdate(this, state.m_nID < 0xF000);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
CListCtrl &CDockDialog::getListCtrl()
|
|
{
|
|
CMainFrame *pMain = m_pMyFrame;
|
|
CWnd *pWnd = (m_pMyFrame->m_wndSplitter).GetPane(0, 0);
|
|
CChildFrame *pChild = ((CChildFrame *)((m_pMyFrame->m_wndSplitter).GetPane(0, 0)));
|
|
CMyListView *pListView = (CMyListView *)(pChild->m_wndSplitter.GetPane(0, 0));
|
|
return pListView->GetListCtrl();
|
|
}
|
|
CCoolTreeCtrl &CDockDialog::getTreeCtrl()
|
|
{
|
|
return m_pMyFrame->m_wndMyDialogBar.m_tree;
|
|
}
|
|
|
|
CGsPreviewCtrl &CDockDialog::getPreviewCtrl()
|
|
{
|
|
CMainFrame *pMain = m_pMyFrame;
|
|
CWnd *pWnd = (m_pMyFrame->m_wndSplitter).GetPane(0, 0);
|
|
CChildFrame *pChild = ((CChildFrame *)((m_pMyFrame->m_wndSplitter).GetPane(0, 0)));
|
|
return pChild->m_wndPreViewBar.m_previewCtrl; //hrp
|
|
}
|
|
|
|
CHYCoolBar3 &CDockDialog::getExPlainBar()
|
|
{
|
|
CMainFrame *pMain = m_pMyFrame;
|
|
CWnd *pWnd = (m_pMyFrame->m_wndSplitter).GetPane(0, 0);
|
|
CChildFrame *pChild = ((CChildFrame *)((m_pMyFrame->m_wndSplitter).GetPane(0, 0)));
|
|
return pChild->m_wndExplainBar;
|
|
}
|
|
void CDockDialog::GetIniArray()
|
|
{
|
|
|
|
CString sIniName = m_sPathName+_T("\\tk\\Customer\\图库中心");
|
|
//GetFolderByIni(sIniName,m_sIniArr);
|
|
BaseFuncs::GetInIFolderAndIcon(sIniName, m_sIniArr, m_sIniBigIcon, m_sIniSmlIcon);
|
|
}
|
|
void CDockDialog::AddItemToTreeCtrl()
|
|
{
|
|
if (!getTreeCtrl().m_hWnd)
|
|
return;
|
|
// 加载ICON到imageList
|
|
m_TreeImage.Create(16, 16, ILC_MASK, 15, 0);
|
|
m_TreeImage.Add(&m_FileTypeBMP, RGB(255, 255, 255));
|
|
|
|
getTreeCtrl().SetImageList(&m_TreeImage, TVSIL_NORMAL);
|
|
getTreeCtrl().SetIndent(18);
|
|
getTreeCtrl().SetItemHeight(18);
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// 添加数据 **************************************************************
|
|
CStringArray sDwgNameArray;
|
|
CString sDirPath;
|
|
HTREEITEM hItem;// hItemChild;
|
|
sDirPath = m_sPathName + _T("\\tk\\Customer\\图库中心\\图块库");
|
|
|
|
HTREEITEM hParentItem;
|
|
hParentItem = hItem = getTreeCtrl().InsertItem(_T("图块库"), 0, 1);
|
|
ViewIni(hParentItem, sDirPath);
|
|
hParentItem = hItem = getTreeCtrl().InsertItem(_T("用户图库"), 0, 1);
|
|
|
|
|
|
sDirPath = m_sPathName + _T("\\tk\\Customer\\图库中心\\用户图库");
|
|
|
|
|
|
ViewIni(hParentItem, sDirPath);
|
|
}
|
|
|
|
BOOL IsOpenFile(CString strFileName, AcApDocument *&pOpenDoc)
|
|
{
|
|
strFileName.MakeLower();
|
|
BOOL bFileAlreadyOpened = FALSE;
|
|
AcApDocumentIterator *pIterator;
|
|
pIterator = acDocManager->newAcApDocumentIterator();
|
|
AcApDocument *pDoc;
|
|
CString strDocName;
|
|
for (; !pIterator->done(); pIterator->step())
|
|
{
|
|
pDoc = pIterator->document();
|
|
strDocName = pDoc->fileName();
|
|
strDocName.MakeLower();
|
|
if (strFileName == strDocName)
|
|
{
|
|
pOpenDoc = pDoc;
|
|
// acDocManager->setCurDocument(pDoc,AcAp::kNone,true);
|
|
bFileAlreadyOpened = TRUE;
|
|
break;
|
|
}
|
|
}
|
|
delete pIterator;
|
|
return bFileAlreadyOpened;
|
|
}
|
|
void CDockDialog::AddItemToListCtrl(CString sDwgName) //更新listview
|
|
{
|
|
if (!getListCtrl().m_hWnd)
|
|
return;
|
|
getListCtrl().DeleteAllItems();
|
|
CString sCurParentText = getTreeCtrl().m_sCurParentText;
|
|
CString sCurSltText = getTreeCtrl().m_sCurSltText;
|
|
m_ListImage.DeleteImageList();
|
|
{
|
|
|
|
AcDbDatabase *pDb = NULL;
|
|
AcDbBlockTable *pBlockTable = NULL;
|
|
AcDbBlockTableIterator *pBlkItr = NULL;
|
|
AcDbBlockTableRecord *pBlkTlbRcd = NULL;
|
|
CStringArray strNameArray;
|
|
|
|
// 得到一个DWG文件内部的所有块
|
|
|
|
AcApDocument *pDoc = NULL;
|
|
BOOL bIsOpenDocument = FALSE;
|
|
if (bIsOpenDocument = IsOpenFile(sDwgName, pDoc))
|
|
{
|
|
pDb = pDoc->database();
|
|
acDocManagerPtr()->lockDocument(curDoc());
|
|
}
|
|
else
|
|
{
|
|
acDocManagerPtr()->lockDocument(curDoc());
|
|
pDb = new AcDbDatabase(Adesk::kFalse);
|
|
Acad::ErrorStatus res1 = pDb->readDwgFile(sDwgName);
|
|
}
|
|
Acad::ErrorStatus res = pDb->getSymbolTable(pBlockTable, AcDb::kForRead);
|
|
if (res != Acad::eOk)
|
|
{
|
|
if (!bIsOpenDocument)
|
|
delete pDb;
|
|
acDocManagerPtr()->unlockDocument(curDoc());
|
|
return;
|
|
}
|
|
pBlockTable->newIterator(pBlkItr);
|
|
if (pBlkItr == NULL)
|
|
{
|
|
pBlockTable->close();
|
|
delete pBlkItr;
|
|
if (!bIsOpenDocument)
|
|
delete pDb;
|
|
acDocManagerPtr()->unlockDocument(curDoc());
|
|
return;
|
|
}
|
|
// 得到内部块的数量
|
|
int iNum = 0;
|
|
for (; !pBlkItr->done(); pBlkItr->step())
|
|
{
|
|
iNum++;
|
|
}
|
|
delete pBlkItr;
|
|
pBlockTable->newIterator(pBlkItr);
|
|
//ILC_COLOR8
|
|
|
|
m_ListImage.Create(32, 32, ILC_MASK, iNum, 0);
|
|
|
|
// AfxMessageBox("hrp");
|
|
iNum = 0;
|
|
for (; !pBlkItr->done(); pBlkItr->step())
|
|
{
|
|
ACHAR *RcdName;
|
|
if (pBlkItr->getRecord(pBlkTlbRcd, AcDb::kForRead)!=Acad::eOk)
|
|
continue;
|
|
pBlkTlbRcd->getName(RcdName);
|
|
pBlkTlbRcd->close();
|
|
CString sName = RcdName;
|
|
if (RcdName)
|
|
free(RcdName);
|
|
if (sName.Find(_T("*"))>=0)
|
|
continue;
|
|
// 根据一个内部块,得到ad对应的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_ListImage.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_ListImage.Add(hIcon);
|
|
strNameArray.Add(sName);
|
|
}
|
|
}
|
|
pBlockTable->close();
|
|
delete pBlkItr;
|
|
if (!bIsOpenDocument)
|
|
delete pDb;
|
|
acDocManagerPtr()->unlockDocument(curDoc());
|
|
|
|
// 插入到ListCtrl中
|
|
int iCount = (int)strNameArray.GetSize();
|
|
//设置listwnd中的说明数组
|
|
getListCtrl().SetImageList(&m_ListImage, TVSIL_NORMAL);
|
|
getListCtrl().SetImageList(&m_ListImage, LVSIL_SMALL);
|
|
|
|
for (int i = 0; i<iCount; i++)
|
|
{
|
|
//pListWnd->m_sExplains.SetAt(i,"未找到图块说明");
|
|
getListCtrl().InsertItem(i, strNameArray.GetAt(i), i);
|
|
|
|
|
|
//CListCtrl
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
|
|
void CDockDialog::ViewIni(HTREEITEM hParent, CString sIniName)
|
|
{
|
|
CStringArray sSubDir;
|
|
BaseFuncs::GetSubDir(sIniName, sSubDir);
|
|
int nLen = 0;
|
|
for (nLen = 0; nLen<sSubDir.GetSize(); nLen++)
|
|
{
|
|
HTREEITEM hParentNew;
|
|
hParentNew = getTreeCtrl().InsertItem(sSubDir.GetAt(nLen), 0, 1, hParent);
|
|
ViewIni(hParentNew, sIniName+_T("\\")+sSubDir.GetAt(nLen));
|
|
}
|
|
CStringArray sFileNameArr;
|
|
BaseFuncs::GetFileNameByDir(sIniName, _T(".dwg"), sFileNameArr);
|
|
for (nLen = 0; nLen<sFileNameArr.GetSize(); nLen++)
|
|
{
|
|
CString strFileName = sFileNameArr[nLen];
|
|
strFileName.TrimLeft();
|
|
strFileName.TrimRight();
|
|
if (strFileName.IsEmpty())
|
|
continue;
|
|
getTreeCtrl().InsertItem(sFileNameArr.GetAt(nLen), 3, 4, hParent);
|
|
}
|
|
}
|
|
|
|
|
|
void CDockDialog::ColorHatch(int nColor) //填充
|
|
{
|
|
if (acedGetAcadDwgView()!=NULL)
|
|
acedGetAcadDwgView()->SetFocus(); //设置CAD焦点
|
|
// CAD_SendStringToExecute("pline",FALSE);
|
|
// return;
|
|
CString sText;
|
|
AcDbObjectIdArray ExtIds;
|
|
AcDbObjectIdArray DftIds;
|
|
AcDbObjectId ExtId;
|
|
AcDbObjectId DftId;
|
|
ads_point pt;
|
|
ads_name first;
|
|
ads_name last;
|
|
acedInitGet(0, _T("D S"));
|
|
ACHAR kw[10];
|
|
ads_name ExtName;
|
|
ads_name DftName;
|
|
ads_point OutPnt;
|
|
ads_point InPnt;
|
|
AcDbObjectId FirstId;
|
|
AcDbObjectId LastId;
|
|
while (1)
|
|
{
|
|
|
|
acdbEntLast(first);
|
|
acdbGetObjectId(FirstId, first);
|
|
acedInitGet(0, _T("S"));
|
|
//绘边界(D)/
|
|
switch (acedGetPoint(NULL, _T("\n请在要填充的区域内点取一点: 或[选边界(S)]"), pt))
|
|
{
|
|
case RTNORM:
|
|
ExtIds.setLogicalLength(0);
|
|
DftIds.setLogicalLength(0);
|
|
|
|
sText.Format(_T("-boundary %0.2f,%0.2f "), pt[0], pt[1]);
|
|
|
|
BaseFuncs::CAD_SendStringToExecute(sText, TRUE);
|
|
BaseFuncs::ClearAcadCmdLine();
|
|
acdbEntLast(last);
|
|
|
|
acdbGetObjectId(LastId, last);
|
|
if (FirstId!=LastId)
|
|
{
|
|
ExtIds.append(LastId);
|
|
acdbEntNext(first, first);
|
|
acdbGetObjectId(FirstId, first);
|
|
if (FirstId!=LastId)
|
|
{
|
|
DftIds.append(FirstId);
|
|
}
|
|
BaseFuncs::makeHatch3(_T("SOLID"), ExtIds, DftIds, nColor);
|
|
BaseFuncs::DeleteEnt(LastId);
|
|
if (DftIds.logicalLength()>0)
|
|
BaseFuncs::DeleteEnt(FirstId);
|
|
}
|
|
|
|
break;
|
|
case RTKWORD:
|
|
acedGetInput(kw);
|
|
switch (kw[0])
|
|
{
|
|
case 'D':
|
|
BaseFuncs::DrawD(DftId);
|
|
{
|
|
ExtIds.setLogicalLength(0);
|
|
DftIds.setLogicalLength(0);
|
|
DftIds.append(DftId);
|
|
BaseFuncs::makeHatch3(_T("SOLID"), ExtIds, DftIds, nColor);
|
|
BaseFuncs::ClearAcadCmdLine();
|
|
}
|
|
break;
|
|
case 'S':
|
|
ExtIds.setLogicalLength(0);
|
|
DftIds.setLogicalLength(0);
|
|
if (acedEntSel(_T("\n选择要填充的边界:"), ExtName, OutPnt)!=RTNORM)
|
|
return;
|
|
acedEntSel(_T("\n选择内部孤岛边界:"), DftName, InPnt);
|
|
if (acdbGetObjectId(ExtId, ExtName)==Acad::eOk)
|
|
ExtIds.append(ExtId);
|
|
if (acdbGetObjectId(DftId, DftName)==Acad::eOk)
|
|
DftIds.append(DftId);
|
|
BaseFuncs::makeHatch3(_T("SOLID"), ExtIds, DftIds, nColor);
|
|
BaseFuncs::ClearAcadCmdLine();
|
|
break;
|
|
default:
|
|
BaseFuncs::ClearAcadCmdLine();
|
|
return;
|
|
}
|
|
break;
|
|
default:
|
|
BaseFuncs::ClearAcadCmdLine();
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
|
|
void CDockDialog::patternHatch(CString sPattern) //填充
|
|
{
|
|
if (acedGetAcadDwgView()!=NULL)
|
|
acedGetAcadDwgView()->SetFocus(); //设置CAD焦点
|
|
CString sText;
|
|
AcDbObjectIdArray ExtIds;
|
|
AcDbObjectIdArray DftIds;
|
|
AcDbObjectId ExtId;
|
|
AcDbObjectId DftId;
|
|
ads_point pt;
|
|
ads_name first;
|
|
|
|
ACHAR kw[10];
|
|
AcDbObjectId FirstId;
|
|
AcDbObjectId LastId;
|
|
acdbEntLast(first);
|
|
acdbGetObjectId(FirstId, first);
|
|
|
|
double dAngle = 0.0;
|
|
double dScale = 10;
|
|
|
|
if ((acedGetReal(_T("\n输入角度(0.0):"), &dAngle)==RTCAN))
|
|
return;
|
|
|
|
if (acedGetReal(_T("\n放大比例(10):"), &dScale)==RTCAN)
|
|
return;
|
|
CString sNew;
|
|
acedInitGet(0, _T("S"));
|
|
//绘边界(D)/
|
|
switch (acedGetPoint(NULL, _T("\n请在要填充的区域内点取一点: 或[选边界(S)]"), pt))
|
|
{
|
|
case RTNORM:
|
|
ExtIds.setLogicalLength(0);
|
|
DftIds.setLogicalLength(0);
|
|
sText = _T("-bhatch p ") +sPattern;
|
|
|
|
sNew.Format(_T(" %0.2f %0.2f %0.2f,%0.2f "), dScale, dAngle, pt[0], pt[1]);
|
|
sText = sText+sNew;
|
|
BaseFuncs::CAD_SendStringToExecute(sText, TRUE);
|
|
BaseFuncs::ClearAcadCmdLine();
|
|
return;
|
|
case RTKWORD:
|
|
acedGetInput(kw);
|
|
switch (kw[0])
|
|
{
|
|
case 'D':
|
|
break;
|
|
case 'S':
|
|
sText = _T("hatch ") +sPattern;
|
|
sNew.Format(_T(" %0.2f %0.2f "), dScale, dAngle);
|
|
sText = sText+sNew;
|
|
BaseFuncs::CAD_SendStringToExecute(sText, FALSE);
|
|
return;
|
|
default:
|
|
BaseFuncs::ClearAcadCmdLine();
|
|
return;
|
|
}
|
|
break;
|
|
default:
|
|
BaseFuncs::ClearAcadCmdLine();
|
|
return;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
void CDockDialog::OnBigIcon() //大图标
|
|
{
|
|
CChildFrame *pChild = ((CChildFrame *)((m_pMyFrame->m_wndSplitter).GetPane(0, 0)));
|
|
CMyListView *pListView = (CMyListView *)(pChild->m_wndSplitter.GetPane(0, 0));
|
|
pListView->ModifyStyle(LVS_TYPEMASK, LVS_ICON);
|
|
}
|
|
void CDockDialog::OnSmallIcon() //小图标
|
|
{
|
|
CChildFrame *pChild = ((CChildFrame *)((m_pMyFrame->m_wndSplitter).GetPane(0, 0)));
|
|
CMyListView *pListView = (CMyListView *)(pChild->m_wndSplitter.GetPane(0, 0));
|
|
pListView->ModifyStyle(LVS_TYPEMASK, LVS_SMALLICON);
|
|
}
|
|
void CDockDialog::OnListIcon() //列表
|
|
{
|
|
CChildFrame *pChild = ((CChildFrame *)((m_pMyFrame->m_wndSplitter).GetPane(0, 0)));
|
|
CMyListView *pListView = (CMyListView *)(pChild->m_wndSplitter.GetPane(0, 0));
|
|
pListView->ModifyStyle(LVS_TYPEMASK, LVS_LIST);
|
|
}
|
|
void CDockDialog::OnReportIcon() //详细资料
|
|
{
|
|
CChildFrame *pChild = ((CChildFrame *)((m_pMyFrame->m_wndSplitter).GetPane(0, 0)));
|
|
CMyListView *pListView = (CMyListView *)(pChild->m_wndSplitter.GetPane(0, 0));
|
|
pListView->ModifyStyle(LVS_TYPEMASK, LVS_REPORT);
|
|
}
|
|
|