Files
envi-code/SourceCode/Code2026/EarthWormCmd/JDXZDlg.cpp
T
2026-09-28 15:28:50 +08:00

278 lines
5.5 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);
}