1. 程式人生 > >MFC Tree Control對滑鼠右擊的響應.

MFC Tree Control對滑鼠右擊的響應.

在做聊天程式的時候,想對樹形控制元件進行右鍵響應.只響應使用者,不響應線上使用者那一行.

 

 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; }

原文地址:MFC Tree Control對滑鼠右擊的響應. 作者:walking