278 lines
5.6 KiB
C++
278 lines
5.6 KiB
C++
#include "stdafx.h"
|
|
#include "JDXZDlg.h"
|
|
|
|
#ifndef EW_ROOT
|
|
#define EW_ROOT 0
|
|
#endif
|
|
|
|
#ifndef WM_ITEMCLICK
|
|
#define WM_ITEMCLICK (WM_USER+0x109)
|
|
#endif
|
|
|
|
#ifndef WM_SELFINISH
|
|
#define WM_SELFINISH (WM_USER+0x111)
|
|
#endif
|
|
|
|
namespace
|
|
{
|
|
void showCtrl(UINT id, bool bShow)
|
|
{
|
|
|
|
}
|
|
}
|
|
|
|
IMPLEMENT_DYNAMIC(CJDXZDlg, CDialog)
|
|
|
|
CJDXZDlg::CJDXZDlg(CWnd* pParent /*=NULL*/)
|
|
: CDialog(CJDXZDlg::IDD, pParent)
|
|
{
|
|
m_pWndTree = NULL;
|
|
m_nAction = -1;
|
|
}
|
|
|
|
CJDXZDlg::~CJDXZDlg()
|
|
{
|
|
}
|
|
|
|
void CJDXZDlg::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CDialog::DoDataExchange(pDX);
|
|
DDX_Control(pDX, IDC_TREE1, m_wndModelTree);
|
|
DDX_Radio(pDX, IDC_RADIO1, m_nXYZType);
|
|
DDX_Text(pDX, IDC_EDIT1, m_dOper);
|
|
}
|
|
|
|
BEGIN_MESSAGE_MAP(CJDXZDlg, CDialog)
|
|
ON_BN_CLICKED(IDOK, &CJDXZDlg::OnBnClickedOk)
|
|
ON_NOTIFY(NM_CLICK, IDC_TREE1, &CJDXZDlg::OnNMClickTree1)
|
|
ON_WM_CLOSE()
|
|
ON_BN_CLICKED(IDCANCEL, &CJDXZDlg::OnBnClickedCancel)
|
|
END_MESSAGE_MAP()
|
|
|
|
void CJDXZDlg::SetFuncAction(int nAction)
|
|
{
|
|
m_nAction = nAction;
|
|
}
|
|
|
|
void CJDXZDlg::SetCopyFrom(CTreeCtrl* pTree)
|
|
{
|
|
m_pWndTree = pTree;
|
|
|
|
if ( IsWindow(m_hWnd) )
|
|
{
|
|
m_wndModelTree.DeleteItem(m_wndModelTree.GetRootItem());
|
|
ShowModelTree();
|
|
}
|
|
}
|
|
|
|
BOOL CJDXZDlg::GetSelectItems(CPtrArray& arItemSel)
|
|
{
|
|
arItemSel.Append(m_arItemSel);
|
|
return !arItemSel.IsEmpty();
|
|
}
|
|
|
|
void CJDXZDlg::SetUShapeData(UShapeData& data)
|
|
{
|
|
memcpy(&m_UShapeData,&data,sizeof(UShapeData));
|
|
}
|
|
|
|
void CJDXZDlg::GetUShapeData(UShapeData& data)
|
|
{
|
|
memcpy(&data,&m_UShapeData,sizeof(UShapeData));
|
|
}
|
|
|
|
BOOL CJDXZDlg::OnInitDialog()
|
|
{
|
|
CDialog::OnInitDialog();
|
|
|
|
CBitmap bmp;
|
|
if (!bmp.LoadBitmap (IDB_BITMAPPRIV))
|
|
{
|
|
AfxMessageBox(_T ("Can't load bitmap: %x\n"), IDB_BITMAPPRIV);
|
|
ASSERT (FALSE);
|
|
return FALSE;
|
|
}
|
|
|
|
BITMAP bmpObj;
|
|
bmp.GetBitmap (&bmpObj);
|
|
|
|
UINT nFlags = ILC_COLOR24 | ILC_MASK;
|
|
|
|
m_Imagelist.Create (16, bmpObj.bmHeight, nFlags, 0, 0);
|
|
m_Imagelist.Add (&bmp, RGB (255, 0, 0));
|
|
m_wndModelTree.SetImageList(&m_Imagelist,TVSIL_NORMAL);
|
|
|
|
ShowModelTree();
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
void CJDXZDlg::IteratorMakeTree(HTREEITEM hRootFr,HTREEITEM hRootTo)
|
|
{
|
|
CString sItem;
|
|
int nImage = 0,nSelImage = 0;
|
|
|
|
HTREEITEM hChild = m_pWndTree->GetChildItem(hRootFr);
|
|
while(hChild != NULL)
|
|
{
|
|
sItem = m_pWndTree->GetItemText(hChild);
|
|
m_pWndTree->GetItemImage(hChild,nImage,nSelImage);
|
|
HTREEITEM hItem = m_wndModelTree.InsertItem(sItem,nImage,nSelImage,hRootTo);
|
|
|
|
m_mapItemNewToOld.SetAt(hItem,hChild);
|
|
|
|
IteratorMakeTree(hChild,hItem);
|
|
|
|
m_wndModelTree.SelectItem(hRootTo);
|
|
m_wndModelTree.Expand(hRootTo,TVE_EXPAND);
|
|
|
|
hChild = m_pWndTree->GetNextSiblingItem(hChild);
|
|
}
|
|
}
|
|
|
|
void CJDXZDlg::ShowModelTree()
|
|
{
|
|
if (m_pWndTree != NULL)
|
|
{
|
|
HTREEITEM hRootFr = m_pWndTree->GetRootItem();
|
|
HTREEITEM hRootTo = m_wndModelTree.InsertItem(_T("节点造族"),EW_ROOT,EW_ROOT);
|
|
|
|
IteratorMakeTree(hRootFr,hRootTo);
|
|
}
|
|
}
|
|
|
|
void CJDXZDlg::ItersectItemSel(HTREEITEM hParent)
|
|
{
|
|
HTREEITEM hChild = m_wndModelTree.GetChildItem(hParent);
|
|
while(hChild != NULL)
|
|
{
|
|
if (m_wndModelTree.GetCheck(hChild))
|
|
{
|
|
HTREEITEM hOld = NULL;
|
|
if ( m_mapItemNewToOld.Lookup(hChild,(void*&)hOld) )
|
|
{
|
|
m_arItemSel.Add(hOld);
|
|
}
|
|
}
|
|
ItersectItemSel(hChild);
|
|
hChild = m_wndModelTree.GetNextSiblingItem(hChild);
|
|
}
|
|
}
|
|
|
|
void CJDXZDlg::OnBnClickedOk()
|
|
{
|
|
UpdateData();
|
|
m_arItemSel.RemoveAll();
|
|
|
|
HTREEITEM hRootNew = m_wndModelTree.GetRootItem();
|
|
ItersectItemSel(hRootNew);
|
|
|
|
if (m_nOperType != (int)eMove && m_nOperType != (int)eRotate)
|
|
{
|
|
ShowWindow(SW_HIDE);
|
|
GetParent()->EnableWindow(true);
|
|
}
|
|
|
|
GetParent()->SendMessage(WM_SELFINISH,(WPARAM)m_nAction,0);
|
|
}
|
|
|
|
void CJDXZDlg::CheckChildItem(HTREEITEM hParent,BOOL bCheck)
|
|
{
|
|
HTREEITEM hChild = m_wndModelTree.GetChildItem(hParent);
|
|
while(hChild != NULL)
|
|
{
|
|
m_wndModelTree.SetCheck(hChild,bCheck);
|
|
|
|
CheckChildItem(hChild,bCheck);
|
|
hChild = m_wndModelTree.GetNextSiblingItem(hChild);
|
|
}
|
|
}
|
|
|
|
void CJDXZDlg::OnNMClickTree1(NMHDR *pNMHDR, LRESULT *pResult)
|
|
{
|
|
CPoint point,ptcursor;
|
|
::GetCursorPos(&point);
|
|
ptcursor = point;
|
|
m_wndModelTree.ScreenToClient(&point);
|
|
|
|
UINT uFlags;
|
|
|
|
HTREEITEM hItem = m_wndModelTree.HitTest(point, &uFlags), hP(NULL);
|
|
if (hItem != NULL)
|
|
{
|
|
CString sItem = m_wndModelTree.GetItemText(hItem);
|
|
// 判断 uFlags
|
|
if (uFlags == TVHT_ONITEMSTATEICON) // check框
|
|
{
|
|
CheckChildItem(hItem, !m_wndModelTree.GetCheck(hItem));
|
|
hP = m_wndModelTree.GetParentItem(hItem);
|
|
if (hP == m_wndModelTree.GetRootItem()) // 如果父节点是根节点,则不需要发消息
|
|
return;
|
|
else
|
|
{
|
|
HTREEITEM hItemNew = NULL;
|
|
if (m_mapItemNewToOld.Lookup(hItem, (void*&)hItemNew))
|
|
{
|
|
GetParent()->SendMessage(WM_ITEMCLICK, (WPARAM)hItemNew, NULL);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
*pResult = 0;
|
|
}
|
|
|
|
void CJDXZDlg::OnClose()
|
|
{
|
|
ShowWindow(SW_HIDE);
|
|
m_nAction = -1;
|
|
GetParent()->EnableWindow(true);
|
|
}
|
|
|
|
void CJDXZDlg::OnBnClickedCancel()
|
|
{
|
|
GetParent()->EnableWindow(true);
|
|
ShowWindow(SW_HIDE);
|
|
m_nAction = -1;
|
|
}
|
|
|
|
CJDXZDlg::Type CJDXZDlg::GetOperType()
|
|
{
|
|
return (Type)m_nOperType;
|
|
}
|
|
|
|
void CJDXZDlg::EnableCtrl(UINT id, bool bShow)
|
|
{
|
|
CWnd *pWnd = GetDlgItem(id);
|
|
if (pWnd)
|
|
pWnd->ShowWindow(bShow ? SW_SHOW : SW_HIDE);
|
|
}
|
|
|
|
void CJDXZDlg::SetOperType(Type t)
|
|
{
|
|
m_nOperType = (int)t;
|
|
UpdateData(false);
|
|
|
|
if (t != eMove && t != eRotate)
|
|
{
|
|
EnableCtrl(IDC_RADIO1, false);
|
|
EnableCtrl(IDC_RADIO2, false);
|
|
EnableCtrl(IDC_RADIO3, false);
|
|
EnableCtrl(IDC_STA_TXT1, false);
|
|
EnableCtrl(IDC_EDIT1, false);
|
|
}
|
|
else
|
|
{
|
|
EnableCtrl(IDC_RADIO1, true);
|
|
EnableCtrl(IDC_RADIO2, true);
|
|
EnableCtrl(IDC_RADIO3, true);
|
|
EnableCtrl(IDC_STA_TXT1, true);
|
|
EnableCtrl(IDC_EDIT1, true);
|
|
CWnd *pWnd = GetDlgItem(IDC_STA_TXT1);
|
|
if (pWnd)
|
|
pWnd->SetWindowText(t == eMove ? _T("米") : _T("度"));
|
|
|
|
}
|
|
GetParent()->EnableWindow(false);
|
|
}
|
|
|