MFC Tree Control對滑鼠右擊的響應.
阿新 • • 發佈:2019-01-08
在做聊天程式的時候,想對樹形控制元件進行右鍵響應.只響應使用者,不響應線上使用者那一行.
void CClientDlg::OnNMRClickUserTree(NMHDR *pNMHDR, LRESULT *pResult)
{ // TODO: Add your control notification handler code here NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR; POINT point; GetCursorPos(&point); //把顯示器座標轉換為客戶區座標,一定要是tree控制元件的控制代碼.主要用來測試使用者有沒有選中某項. ::ScreenToClient(pNMTreeView->hdr.hwndFrom,&point); UINT uFlags; uFlags=TVHT_ONITEM; HTREEITEM hItem = m_UserTree.HitTest(point, &uFlags);CMenu menu;
int nID; //就像上圖一樣,我只想當用戶選中walking時才會有效,選中線上使用者也沒有用.m_hRoot在我的程式裡就是儲存線上使用者的樹. if ((hItem != NULL) && (TVHT_ONITEM & uFlags)&&(hItem!=m_hRoot)) { m_UserTree.Select(hItem, TVGN_CARET); menu.LoadMenu(IDR_FILE_TRANSFER); //控制彈出選單的位置,要用到和上面相反的函式. ::ClientToScreen(pNMTreeView->hdr.hwndFrom,&point); CMenu* pContextMenu = menu.GetSubMenu(0); nID = pContextMenu->TrackPopupMenu( TPM_LEFTALIGN | TPM_LEFTBUTTON | TPM_RETURNCMD, point.x, point.y,this); } //下面就是你具體要做的事了,根據選單項來具體安排. switch (nID) { ...... }
*pResult = 0; }