首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> VC++

CListView 列表視圖加入右鍵選單實作教學

     編輯:VC++

彈出式選單(PopMenu)基礎

右鍵選單即彈出式選單。MFC CMenu 類封裝選單操作,核心流程三步驟:

  1. 資源編輯器建立選單資源(如 IDR_POPMENU),須包含至少一個子選單(彈出項)。
  2. LoadMenu 載入資源 → GetSubMenu(0) 取得第一層子選單指標。
  3. TrackPopupMenu 在游標位置顯示並追蹤選擇。

關鍵函數原型

  • BOOL LoadMenu(UINT nIDResource)
  • CMenu* GetSubMenu(int nPos) const
  • BOOL TrackPopupMenu(UINT nFlags, int x, int y, CWnd* pWnd, LPCRECT lpRect=NULL)
    • 對齊旗標:TPM_LEFTALIGN/TPM_CENTERALIGN/TPM_RIGHTALIGN
    • 滑鼠鍵旗標:TPM_RIGHTBUTTON(右鍵可連續彈出並選取)、TPM_LEFTBUTTON
    • x, y 為螢幕座標
  • 完整實作步驟

    1. 類向導加入 NM_RCLICK 處理器

    在 CMyView(繼承 CListView)加入 OnRclick。

    2. 處理器程式碼

    void CMyView::OnRclick(NMHDR* pNMHDR, LRESULT* pResult) {
        CListCtrl& list = GetListCtrl();           // 取得內建 ListCtrl 參考
        CMenu menu, *pSubMenu;
        menu.LoadMenu(IDR_POPMENU);                // 載入選單資源
        pSubMenu = menu.GetSubMenu(0);             // 取得第一層彈出選單
    
        CPoint pt;
        GetCursorPos(&pt);                         // 取得螢幕座標游標位置
    
        int nSel = list.GetSelectionMark();        // 目前選取項索引
        CString strText = list.GetItemText(nSel, 0); // 取得第 0 欄文字
        strText = "您選擇的路徑是:" + strText;
        MessageBox(strText);                       // 示範:顯示選取內容
    
        pSubMenu->TrackPopupMenu(TPM_LEFTALIGN, pt.x, pt.y, this);
        *pResult = 0;
    }

    進階技巧與注意事項

    • 選單項目命令處理:在視圖或框架類中用 ON_COMMAND 映射選單項目 ID 到處理函數。
    • 動態選單內容:彈出前修改 pSubMenu(增刪項目、啟用/禁用、打勾)。
    • 座標轉換:若在 OnContextMenu(WM_CONTEXTMENU)處理,參數已為螢幕座標,無需 GetCursorPos。
    • 多選支援:用 GetNextItem(-1, LVNI_SELECTED) 迭代所有選取項。
    • 資源釋放:CMenu 解構時自動 DestroyMenu,無需手動釋放。

    擴充應用場景

    1. 檔案總管風格:右鍵顯示「開啟、複製、刪除、屬性」等操作。
    2. 資料列編輯:提供「新增、編輯、刪除、匯出」功能。
    3. 欄位自訂:子選單列出所有欄位,勾選控制顯示/隱藏。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved