程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> VC++ >> 在(CListView)列表視圖中添加右鍵菜單

在(CListView)列表視圖中添加右鍵菜單

編輯:VC++

  大家好,這是我第一篇文章,就用我最常用的列表視圖做開始吧,我要做的功能就是在列表框上添加一個右鍵菜單,同時提示當前選中的文本內容,功能很簡單,而且是在別人的基礎上改編的,不過,一切事情都是從最簡單的事情開始的,“天下難事,必做於易;天下大事,必做於細”,況且,只有站在別人的肩膀上才能看的更遠,J,閒言少敘,書規正傳。

  在codeproject網站中(http://www.codeproject.com/listctrl/drivebrowser.asp),Barretto VN的例子已經給出了一個用列表框顯示(具體的)驅動器的例子,所以現在要做的工作是了解與右鍵菜單相關的函數有那些,應該添加到那個位置。

  使用彈出式菜單(PopMenu)

  彈出式菜單(PopMenu)大家都熟悉,在WIN98的桌面上單擊鼠標右鍵彈出的菜單就是彈出式菜單。通常情況下,彈出式菜單在鼠標右鍵單擊時彈出,當然,也可以根據需要隨時彈出。 在VC++5的MFC中,管理菜單的類叫CMenu。下面我向大家介紹建立一個彈出式菜單的基本方法。

  一、在資源編輯器中建立一個菜單資源
  新建一個菜單資源,比如把菜單的ID號為IDC_POPMENU。此菜單有一項兩層,即有一個可彈出的菜單項,而此菜單項的彈出內容即為將要建立的彈出式菜單的內容。至於每一個菜單項的消息映射,與一般的菜單相同。

  二、使用CMenu類對象

  CMenu類的成員函數較多,但建立彈出式菜單只需用到其中幾個成員函數。
  1、LoadMenu函數

  功能:從應用程序的可執行文件中加載菜單資源
  原型:BOOL LoadMenu( UINT nIDResource );
  其中nIDResource是菜單資源的ID號,這裡用的是剛建立的IDC_POPMENU。
  2、GetSubMenu函數

  功能:此函數用於得到子菜單的指針。
  原型:CMenu* GetSubMenu( int nPos ) const;
  nPos為層數,0為第一層子菜單……以此類推。
  由於我們需要的是“可彈出項”的第一層子菜單,因此用GetSubMenu(0)來得到第一層子菜單的類指針。

  3、TrackPopupMenu函數

  功能:在指定位置顯示彈出菜單,並跟蹤所選擇的項
  原型:BOOL TrackPopupMenu( UINT nFlags,int x,int y,CWnd* pWnd,LPCRECT lpRect = NULL );
  其中:
  nFlags為屏幕坐標屬性和鼠標坐標屬性
  屏幕坐標屬性:
  TPM_CENTERALIGN 橫向將菜單以x居中
  TPM_LEFTALIGN 橫向將菜單以x左對齊

  TPM_RIGHTALIGN 橫向將菜單以x右對齊
  鼠標按鍵屬性(只在響應WM_CONTEXTMENU消息時有效):
  TPM_LEFTBUTTON 連續按? 右鍵不會連續彈出菜單,鼠標右鍵不可用於選定菜單項
  TPM_RIGHTBUTTON 連續按鼠標右鍵會連續彈出菜單,鼠標右鍵可用於選定菜單項
  x,y均為屏幕坐標

  lpRect 菜單所占的區域。如果為NULL,當用戶在菜單以外的區域按鼠標鍵時,菜單會消失
  三、具體實現方法

  用ClassWizard中的“Add Windows Message Handler”功能添加對NM_RCLICKT消息的響應函數,函數中代碼如下,注釋很詳細,在vc6+win2000環境下調試成功,大家感興趣的話自己試試吧:


  void CMyView::OnRclick(NMHDR* pNMHDR, LRESULT* pResult)

  {

  CListCtrl &CList = GetListCtrl();//獲取當前列表控件的指針

  CMenu       menu ,* pSubMenu;//定義下面要用到的cmenu對象

  menu.LoadMenu(IDR_POPMENU);//裝載自定義的右鍵菜單

  pSubMenu = menu.GetSubMenu(0);//獲取第一個彈出菜單,所以第一個菜單必須有子菜單

  CPoint oPoint;//定義一個用於確定光標位置的位置

  GetCursorPos( &oPoint);//獲取當前光標的位置,以便使得菜單可以跟隨光標

  int istat=CList.GetSelectionMark();//用istat存放當前選定的是第幾項

  CString pString =CList.GetItemText(istat,0);//獲取當前項中的數據,0代表是第0列

  pString="您選擇的路徑是:"+pString ;//顯示當前選擇項

  MessageBox(pString);//顯示當前選中的路徑

  pSubMenu->TrackPopupMenu (TPM_LEFTALIGN, oPoint.x, oPoint.y, this); //在指定位置顯示彈出菜單

  }

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved