⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mytreectrl.cpp

📁 实时监控
💻 CPP
字号:
// MytreeCtrl.cpp : implementation file
//

#include "stdafx.h"
#include "../resource.h"
#include "MytreeCtrl.h"
#include "IPicture.h"


#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CMytreeCtrl

/*CMytreeCtrl::~CMytreeCtrl()
{
	HTREEITEM	hitem[50] ;
	HTREEITEM	hMitem ;
	int num = GetCount() ;
	hitem[0] = GetFirstVisibleItem() ;
	int i = 1 ;
	BOOL	bChild ;
	while (i<num)
	{
		bChild = ItemHasChildren(hitem[i-1])	;
		if	(bChild)
		{
			hitem[i] = GetChildItem(hitem[i-1]) ;
			i++ ;
		}
		else
		{
			hitem[i] = GetNextSiblingItem(hitem[i-1]) ;
			hMitem = hitem[i-1]
			while (hitem[i] ==NULL)
			{
				hMitem = GetParentItem(hMitem) ;
				hitem[i] = GetNextSiblingItem(hMitem) ;
			}
			i++ ;
		}
	} 
	for (i = 0;i<num;i++)
	{
		DWORD	lPtr ;
		lPtr = GetItemData(hitem[i]) ;
		delete (char*)lPtr ;
	}
}*/

BEGIN_MESSAGE_MAP(CMytreeCtrl, CTreeCtrl)
	//{{AFX_MSG_MAP(CMytreeCtrl)
	ON_WM_RBUTTONDOWN()
	ON_COMMAND(ID_CONTEXTMENU_ADD, OnContextmenuAdd)
	ON_COMMAND(ID_CONTEXTMENU_RENAME, OnContextmenuRename)
	ON_WM_LBUTTONDOWN()
	ON_COMMAND(ID_CONTEXTMENU_DELETE, OnContextmenuDelete)
	ON_WM_CLOSE()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CMytreeCtrl message handlers

BOOL CMytreeCtrl::PreTranslateMessage(MSG* pMsg) 
{
	// TODO: Add your specialized code here and/or call the base class
	
	BOOL bHandledMsg = FALSE; 

	switch (pMsg->message) 
	{                       
		case WM_KEYDOWN: 
		{ 
			switch (pMsg->wParam) 
			{ 
				case VK_ESCAPE:
				case VK_RETURN:
					if (::GetKeyState(VK_CONTROL) & 0x8000) 
					{ 
						 break; 
					} 
  
					if (GetEditControl())
					{
						::TranslateMessage(pMsg);
						::DispatchMessage(pMsg);
						bHandledMsg = TRUE; 
					}

				break; 

				default: break; 
			} // switch (pMsg->wParam) 
		} // WM_KEYDOWN 
		break; 

		default: break; 
	} // switch (pMsg->message)                   

 // continue normal translation and dispatching              
	return (bHandledMsg ? TRUE : CTreeCtrl::PreTranslateMessage(pMsg)); 
}

void CMytreeCtrl::OnRButtonDown(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	
	SetFocus();

	ClientToScreen(&point);

	HTREEITEM hCurrSel = GetSelectedItem();

	CPoint pt(0, 0);
	::GetCursorPos(&pt);
	ScreenToClient (&pt);
	HTREEITEM hNewSel = HitTest(pt, &nFlags);

	if (NULL == hNewSel)
	{
		SelectItem(NULL);
	}
	else if (hCurrSel != hNewSel)
	{
		SelectItem(hNewSel);
		SetFocus();
	}


	CMenu Menu;
	if (Menu.LoadMenu(IDM_CONTEXT_MENU))
	{
		CMenu* pSubMenu = Menu.GetSubMenu(0);

		if (pSubMenu!=NULL)
		{
			pSubMenu->TrackPopupMenu(
			TPM_LEFTALIGN | TPM_RIGHTBUTTON,
			point.x, point.y, this);
		}
	}
}

void CMytreeCtrl::OnContextmenuAdd() 
{
	// TODO: Add your command handler code here
	CMapAddDlg dlg ;
	HTREEITEM hitemParent = GetSelectedItem();
	HTREEITEM hTree[50] ;
	HTREEITEM hMitem,hitem ;
	if (dlg.DoModal()==IDOK)
	{
		int num = GetCount() ;				
		hTree[0] = GetFirstVisibleItem() ;
		int i = 1 ;	
		BOOL	bChild ;
		while (i<num)
		{
			bChild	=	ItemHasChildren(hTree[i-1])	;
			if(bChild)
			{	
				hTree[i] = GetChildItem(hTree[i-1]) ;
				i++ ;
			}
			else
			{
				hTree[i] = GetNextSiblingItem(hTree[i-1]) ;
				hMitem = hTree[i-1] ;
				while (hTree[i] == NULL)
				{
					hMitem = GetParentItem(hMitem) ;
					hTree[i] = GetNextSiblingItem(hMitem) ;
				}
				i++ ;
			}
		}
		for(i=0;i<num;i++)
		{
			CString strAddr = (char*)GetItemData(hTree[i]) ;
//			CString strName = GetItemText(hTree[i]) ;
			if(dlg.m_FileAddr == strAddr)// || dlg.m_FileName == strName)
			{
				AfxMessageBox(afx_box_2);
				return ;
			}
		}
		hitem = InsertItem(dlg.m_FileName, hitemParent);	
		char* str = NULL ;
		int m_length = dlg.m_FileAddr.GetLength() ;
		str = dlg.m_FileAddr.GetBuffer(m_length) ;
		char *pPass = new char[200] ;
		memcpy(pPass,str,200) ;
		SetItemData(hitem,(DWORD)pPass) ;
		SelectItem(hitem) ;
	}
}

void CMytreeCtrl::OnContextmenuRename() 
{
	// TODO: Add your command handler code here
	HTREEITEM hitem = GetSelectedItem();
	HTREEITEM hParent = GetParentItem(hitem) ;
	if (hitem == NULL)
		return ;

	CRenameDlg dlg ;

	if (dlg.DoModal()==IDOK)
	{
//		if (DoesItemExist(hParent, dlg.m_Name))
//		{
//			AfxMessageBox(afx_box_1) ;
//			return ;
//		}
			CString str = dlg.m_Name ;
			SetItemText(hitem,str) ;
	}
}


void CMytreeCtrl::OnLButtonDown(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	SetFocus();

	ClientToScreen(&point);

	CPoint pt(0, 0);
	::GetCursorPos(&pt);
	ScreenToClient (&pt);
	HTREEITEM hNewSel = HitTest(pt, &nFlags);

	if (NULL == hNewSel)
	{
		SelectItem(NULL);
	}
	else 
	{
		DWORD fileaddr = GetItemData(hNewSel);
		SetItemState(hNewSel,NULL,TVIS_BOLD);
		SelectItem(hNewSel);
		HTREEITEM hChild = GetChildItem(hNewSel);
		if(hChild)
		{
			EnsureVisible(hChild);
		}
		if	(fileaddr == NULL)
		{
//			AfxMessageBox(afx_box_7);
			return ;
		}
		GetParent()->SendMessage(WM_MY_SHOW,0,fileaddr) ;
	}
}


void CMytreeCtrl::OnContextmenuDelete()  
{
	// TODO: Add your command handler code here
	DWORD pPtr ;
	HTREEITEM hitemD = GetSelectedItem() ;
	HTREEITEM hitem,hitemM;
	if (hitemD == NULL)
		return ;
	////////////////////////////////
	BOOL	bChild ;
	
	bChild = ItemHasChildren(hitemD)	;
	if(bChild)
	{	
		hitem = GetChildItem(hitemD) ;
		while (hitem != hitemD)
		{
			bChild = ItemHasChildren(hitem) ;
			if(bChild)
			{
				hitem = GetChildItem(hitem) ;
			}
			else
			{
				pPtr = GetItemData(hitem) ;
				GetParent()->SendMessage(WM_MY_MAPDELETE,0,pPtr) ;
				delete (char*)pPtr ;
				hitemM = hitem ;
				hitem = GetNextSiblingItem(hitem) ;
				while (hitem == NULL)
				{
					hitem = GetParentItem(hitemM) ;	
				}
				DeleteItem(hitemM) ;
			}			
		}
	}
	pPtr = GetItemData(hitemD) ;	
	DeleteItem(hitemD) ;	
	GetParent()->SendMessage(WM_MY_MAPDELETE,0,pPtr) ;
	delete (char*)pPtr ;	
}

void CMytreeCtrl::OnClose() 
{
	// TODO: Add your message handler code here and/or call default
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -