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

📄 uitreectrl.cpp

📁 vc座的资源管理器源代码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	ON_MESSAGE(WM_APP_OLE_DD_ENTER, OnDragEnter)
	ON_MESSAGE(WM_APP_OLE_DD_LEAVE, OnDragLeave)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CUITreeCtrl message handlers
BOOL CUITreeCtrl::OnCustomDraw(NMHDR* pNMHDR, LRESULT* pResult) 
{
	LPNMTVCUSTOMDRAW lptvcd = (LPNMTVCUSTOMDRAW)pNMHDR;
	if(lptvcd->nmcd.dwDrawStage == CDDS_PREPAINT)
	{
		*pResult = CDRF_NOTIFYITEMDRAW;
	}
	else if(lptvcd->nmcd.dwDrawStage == CDDS_ITEMPREPAINT)
	{
		ItemPrePaint(lptvcd,pResult);
	}
	else if(lptvcd->nmcd.dwDrawStage == CDDS_ITEMPOSTPAINT)
	{
		ItemPostPaint(lptvcd,pResult);
	}
	return TRUE;
}

BOOL CUITreeCtrl::OnRclick(NMHDR* pNMHDR, LRESULT* pResult) 
{
	// TODO: Add your control notification handler code here
	CPoint point;
	HTREEITEM hItem = GetHitItem(&point);
	if (hItem == NULL) 
		return FALSE;
	ClientToScreen(&point);
	ShowPopupMenu(hItem,point);
	*pResult = 0;
	return TRUE;
}

BOOL CUITreeCtrl::OnDeleteItem(NMHDR* pNMHDR, LRESULT* pResult) 
{
	NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
	// TODO: Add your control notification handler code here
	CUIListCtrlData* pData = (CUIListCtrlData*)pNMTreeView->itemOld.lParam;
	if (!pData->GetAutoDelete())
		OnDeleteItemData(pData->GetExtData());
	delete pData;
	return TRUE;
}

LRESULT CUITreeCtrl::OnTVMGetItem(WPARAM wParam,LPARAM lParam)
{
	LPTVITEM pitem = (LPTVITEM)lParam;
	if (m_bMe == false && pitem->mask & TVIF_PARAM)
	{
		CUIListCtrlData* pData = GetListCtrlData(pitem->hItem);
		if (pData)
		{
			pitem->lParam = pData->GetExtData();
			pitem->mask &= ~TVIF_PARAM;
		}
	}
	return Default();
}

LRESULT CUITreeCtrl::OnTVMSetItem(WPARAM wParam,LPARAM lParam)
{
	LPTVITEM pitem = (LPTVITEM)lParam;
	if (m_bMe == false && pitem->mask & TVIF_PARAM)
	{
		CUIListCtrlData* pData = GetListCtrlData(pitem->hItem);
		if (pData)
		{
			pData->SetExtData(pitem->lParam);
			pitem->mask &= ~TVIF_PARAM;
		}
	}
	return Default();
}

LRESULT CUITreeCtrl::OnTVMInsertItem(WPARAM wParam,LPARAM lParam)
{
	LPTVINSERTSTRUCT lpis = (LPTVINSERTSTRUCT)lParam;
	if (m_bMe == false && lpis->item.mask & TVIF_PARAM)
	{
		lpis->item.lParam = (LPARAM)GetNewListCtrlData(lpis->item.lParam,lpis->hParent);
	}
	return Default();
}

int CUITreeCtrl::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
	if (CUIDragDropTree::OnCreate(lpCreateStruct) == -1)
		return -1;

	Init();

	// TODO: Add your specialized creation code here
	return 0;
}

UINT CUITreeCtrl::GetIconID()
{
	return IDI_FOLDER_CLOSED;
}

UINT CUITreeCtrl::GetOpenIconID()
{
	return 0;
}

bool CUITreeCtrl::Expanding(NM_TREEVIEW *nmtvw)
{
	return false;
}

bool CUITreeCtrl::Collapsing(NM_TREEVIEW *nmtvw)
{
	return true;
}

void CUITreeCtrl::Init()
{
	// Create the image list we will need
	int nCxSmall = GetSystemMetrics(SM_CXSMICON);
	int nCySmall = GetSystemMetrics(SM_CYSMICON);
	m_ImageList.Create(nCxSmall,
						nCySmall,
						TRUE,	// list does not include masks
						2,
						0 );	// list won't grow
	UINT nIconID = GetIconID();
	if (nIconID)
	{
		HINSTANCE hInstIcon = AfxFindResourceHandle(MAKEINTRESOURCE(nIconID),RT_GROUP_ICON);
		HICON hIcon = (HICON)LoadImage( hInstIcon, MAKEINTRESOURCE(nIconID), IMAGE_ICON, 
			nCxSmall, nCySmall, 0 );
		m_idxClosed = m_ImageList.Add(hIcon);
	}
	UINT nOpenIconID = GetOpenIconID();
	if (nOpenIconID)
	{
		HINSTANCE hInstIcon = AfxFindResourceHandle(MAKEINTRESOURCE(nOpenIconID),RT_GROUP_ICON);
		HICON hOpenIcon = (HICON)LoadImage( hInstIcon, MAKEINTRESOURCE(nOpenIconID), IMAGE_ICON, 
			nCxSmall, nCySmall, 0 );
		m_idxOpen = m_ImageList.Add(hOpenIcon);
	}
	// Associate the image list with the tree
	SetImageList(&m_ImageList,TVSIL_NORMAL);
	m_ImageList.SetBkColor(CLR_NONE);
	ModifyStyle(0,m_style);
}

BOOL CUITreeCtrl::PreCreateWindow(CREATESTRUCT& cs) 
{
	// TODO: Add your specialized code here and/or call the base class
	cs.style |= m_style;
	return CUIDragDropTree::PreCreateWindow(cs);
}

BOOL CUITreeCtrl::OnEndLabelEdit(NMHDR* pNMHDR, LRESULT* pResult) 
{
	LPNMTVDISPINFO pDispInfo = (LPNMTVDISPINFO)pNMHDR;
	if (pDispInfo->item.pszText)
		*pResult = EndLabelEdit(pDispInfo->item.hItem,pDispInfo->item.pszText);
	return TRUE;
}

BOOL CUITreeCtrl::OnDblclk(NMHDR* pNMHDR, LRESULT* pResult) 
{
	// TODO: Add your control notification handler code here
	HTREEITEM hItem = GetSelectedItem();
	DoubleClick(hItem);
	return TRUE;
}

BOOL CUITreeCtrl::OnReturn(NMHDR* pNMHDR, LRESULT* pResult) 
{
	// TODO: Add your control notification handler code here
	OnDblclk(pNMHDR,pResult);	
	return TRUE;
}

BOOL CUITreeCtrl::OnItemExpanding(NMHDR* pNMHDR, LRESULT* pResult) 
{
	NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
	CWaitCursor w;
	// TODO: Add your control notification handler code here
	if (pNMTreeView->action == TVE_EXPAND)
	{
		Expanding(pNMTreeView);
	}
	else if (pNMTreeView->action == TVE_COLLAPSE)
	{
		Collapsing(pNMTreeView);
	}
	return TRUE;
}

BOOL CUITreeCtrl::OnItemExpanded(NMHDR* pNMHDR, LRESULT* pResult) 
{
	NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
	// TODO: Add your control notification handler code here
/*	if (pNMTreeView->action == TVE_EXPAND)
	{
		SetItemImage(pNMTreeView->itemNew.hItem,m_idxClosed,0);
	}
	else if (pNMTreeView->action == TVE_COLLAPSE)
	{
		SetItemImage(pNMTreeView->itemNew.hItem,m_idxOpen,0);
	}*/
	return TRUE;
}

BOOL CUITreeCtrl::OnSelchanged(NMHDR* pNMHDR, LRESULT* pResult) 
{
	//VK_PRIOR 21 page up key  
	//VK_NEXT 22 page down key  
	//VK_END 23 end key  
	//VK_HOME 24 home key  
	//VK_LEFT 25 left arrow key  
	//VK_UP 26 up arrow key  
	//VK_RIGHT 27 right arrow key  
	//VK_DOWN 28 down arrow key  

	NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
	// TODO: Add your control notification handler code here
	if ((pNMTreeView->itemNew.state & TVIS_SELECTED)) 
	{
		if (pNMTreeView->action == TVC_BYMOUSE || pNMTreeView->action == TVC_UNKNOWN)
		{
			CUIListCtrlData *pData = (CUIListCtrlData*)pNMTreeView->itemNew.lParam;
			if (pData)
			{
				ASSERT_KINDOF(CUIListCtrlData,pData);
				SelectionChanged(pNMTreeView->itemNew.hItem,pData->GetExtData());
			}
			else
				SelectionChanged(pNMTreeView->itemNew.hItem,pNMTreeView->itemNew.lParam);
		}
		else if (pNMTreeView->action == TVC_BYKEYBOARD)
		{
			CopyMemory(&m_NMTreeView,pNMTreeView,sizeof(NM_TREEVIEW));
			if (m_vkeydown && m_IDTimer == 0)
			{
				TRACE0("Timer set\n");
				m_IDTimer = SetTimer(2,100,NULL);
			}
		}
	}	
	*pResult = 0;
	return TRUE;
}

BOOL CUITreeCtrl::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt) 
{
	// TODO: Add your message handler code here and/or call default
	return CUIDragDropTree::OnMouseWheel(nFlags, zDelta, pt);
}

BOOL CUITreeCtrl::PreTranslateMessage(MSG* pMsg) 
{
	// TODO: Add your specialized code here and/or call the base class
	if (pMsg->message == WM_KEYDOWN || pMsg->message == WM_SYSKEYDOWN)
	{
		if (pMsg->wParam == VK_F10 && (GetKeyState(VK_SHIFT) < 0))
		{
			PostMessage(WM_APP_ON_CONTEXT_MENU_KEY);
			return TRUE;
		}
		else if (pMsg->wParam == VK_BACK)
		{
			PostMessage(WM_APP_ON_BACKSPACE_KEY);
			return TRUE;
		}
		else if (pMsg->wParam == VK_F2)
		{
			PostMessage(WM_APP_ON_EDIT_KEY);
			return TRUE;
		}
		else if (pMsg->wParam == VK_F5)
		{
			PostMessage(WM_APP_ON_REFRESH_KEY);
			return TRUE;
		}
		else if (pMsg->wParam == VK_DELETE)
		{
			PostMessage(WM_APP_ON_DELETE_KEY);
			return TRUE;
		}
		else if (pMsg->message == WM_SYSKEYDOWN && pMsg->wParam == VK_RETURN)
		{
			PostMessage(WM_APP_ON_PROPERTIES_KEY);
			return TRUE;
		}
	}
	
	return CUIDragDropTree::PreTranslateMessage(pMsg);
}

void CUITreeCtrl::OnKeydownFolder(NMHDR* pNMHDR, LRESULT* pResult) 
{
	TV_KEYDOWN* pTVKeyDown = (TV_KEYDOWN*)pNMHDR;
	// TODO: Add your control notification handler code here
	m_vkeydown = pTVKeyDown->wVKey;
	*pResult = 0;
}

LRESULT CUITreeCtrl::OnTimerSelChange(WPARAM wParam,LPARAM lParam)
{
	NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)&m_NMTreeView;
	CUIListCtrlData *pData = (CUIListCtrlData*)pNMTreeView->itemNew.lParam;
	if (pData)
	{
		ASSERT_KINDOF(CUIListCtrlData,pData);
		SelectionChanged(pNMTreeView->itemNew.hItem,pData->GetExtData());
	}
	else
		SelectionChanged(pNMTreeView->itemNew.hItem,pNMTreeView->itemNew.lParam);
	return 1L;
}	

void CUITreeCtrl::OnTimer( UINT nIDEvent )
{
	CUIDragDropTree::OnTimer(nIDEvent);
	if (nIDEvent == m_IDTimer)
	{
		if (m_vkeydown)
		{
			SHORT sRet = GetAsyncKeyState(m_vkeydown);
			if (sRet >= 0)
			{
				KillTimer(m_IDTimer);
				m_IDTimer = 0;
				m_vkeydown = 0;
				PostMessage(WM_APP_TIMER_SEL_CHANGE);
			}
		}
	}
}

LRESULT CUITreeCtrl::OnDragDrop(WPARAM wParam,LPARAM lParam)
{
	if (GetDragDrop() == false)
		return 1L;
	// get the info we need
	CDD_OleDropTargetInfo *pInfo = (CDD_OleDropTargetInfo*)wParam;
	ASSERT(pInfo);
	if (pInfo->GetDataObject() != NULL)
		return DragDrop(pInfo) ? 1 : 0;
	else
		return 1;
}

// user is currently over the tree view window
// return 1 if we are interested in the CB format
LRESULT CUITreeCtrl::OnDragOver(WPARAM wParam,LPARAM lParam)
{
	if (GetDragDrop() == false)
		return 1L;
	CDD_OleDropTargetInfo *pInfo = (CDD_OleDropTargetInfo*)wParam;
	ASSERT(pInfo);
	if (pInfo->GetDataObject() != NULL)
		return DragOver(pInfo) ? 1 : 0;
	else
		return 1;
}

LRESULT CUITreeCtrl::OnDragEnter(WPARAM wParam,LPARAM lParam)
{
	if (GetDragDrop() == false)
		return 1L;
	CDD_OleDropTargetInfo *pInfo = (CDD_OleDropTargetInfo*)wParam;
	ASSERT(pInfo);
	if (pInfo->GetDataObject() != NULL)
		return DragEnter(pInfo) ? 1 : 0;
	else
		return 1;
}

LRESULT CUITreeCtrl::OnDragLeave(WPARAM wParam,LPARAM lParam)
{
	if (GetDragDrop() == false)
		return 1L;
	CDD_OleDropTargetInfo *pInfo = (CDD_OleDropTargetInfo*)wParam;
	ASSERT(pInfo);
	if (pInfo->GetDataObject() != NULL)
		return DragLeave(pInfo) ? 1 : 0;
	else
		return 1;
}

// Drag and drop initiated
// Return 1 if processed
LRESULT CUITreeCtrl::OnDDDoDragDrop(WPARAM wParam,LPARAM lParam)
{
	if (GetDragDrop() == false)
		return 1L;
	NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)wParam;
	COleDataSource *pOleDataSource = (COleDataSource*)lParam;
	ASSERT(pOleDataSource);
	return DoDragDrop(pNMTreeView,pOleDataSource);
}

LRESULT CUITreeCtrl::OnAppPropertiesKey(WPARAM wParam, LPARAM lParam)
{
	ShowProperties(GetSelectedItem());
	return 1L;
}

LRESULT CUITreeCtrl::OnAppDeleteKey(WPARAM wParam, LPARAM lParam)
{
	DeleteItem(GetSelectedItem());
	return 1L;
}

LRESULT CUITreeCtrl::OnAppRefreshKey(WPARAM wParam, LPARAM lParam)
{
	Refresh();
	return 1L;
}

LRESULT CUITreeCtrl::OnAppEditKey(WPARAM wParam, LPARAM lParam)
{
	EditLabel(GetSelectedItem());
	return 1L;
}

LRESULT CUITreeCtrl::OnAppContextMenuKey(WPARAM wParam, LPARAM lParam)
{
	CRect rc;
	GetItemRect(GetSelectedItem(),&rc,FALSE);
	ClientToScreen(&rc);
	ShowPopupMenu(GetSelectedItem(),rc.CenterPoint());
	return 1L;
}

LRESULT CUITreeCtrl::OnAppBackspaceKey(WPARAM wParam, LPARAM lParam)
{
	GoBack(GetSelectedItem());
	return 1L;
}

⌨️ 快捷键说明

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