MFC Listbox創建右鍵菜單詳解

恩 ,大家好。我用的是VS2010,不會用CSDN的插入圖片的方法,大家表噴我。

這幾天在搞MFC,因爲客戶要求(TMD)所以只好搞一個右鍵菜單。這個在網上確實有許多的版本,但是大多語焉不詳,所以今天我特地把這個詳細的步驟寫出來,希望大家作爲參考。

創建右鍵菜單一共分三步。

第一步創建菜單資源:

1、在解決方案資源管理器裏面右鍵點擊“資源文件”,在”添加“項裏選擇“資源”,在選擇“Menu”,命名爲idc_menu1.

2、接下來在這個menu裏添加一個"刪除"項。這個太簡單了,我就不贅述了。

3、右鍵點擊“刪除”項選擇“添加事件處理程序”。把時間處理程序命名爲“m_Delete”。

代碼如下:
int spy_index;
 spy_index=m_spy.GetCurSel();
    if(spy_index==CB_ERR)
 {
      MessageBox("請選中一個記錄");
 }
 else
 {
     //刪除listbox 中的記錄
     m_spy.DeleteString(spy_index);

}

 

這樣就成功的把菜單及其處理程序寫好了。

 

第二步,從CListBox類派生出一個新類,且在該派生類中添加一個WM_RBUTTONDOWN消息的響應函數:

 1、派生類:

在類嚮導裏選擇“新建類”,選擇基類爲listbox。

新建了類以後需要自己寫一個消息響應函數

2、函數具體如下

afx_msg LRESULT m_list::OnRbuttondown(WPARAM wParam, LPARAM lParam)
{  

 POINT   pt;
 GetCursorPos(&pt);
 int nCount = GetCount();
 ScreenToClient(&pt);
    //實現右鍵點擊選中目標
 for (int i =0; i<nCount; i++)
    {
        bool a;
  CRect rc;
  
        GetItemRect(i, &rc);
  if(rc.PtInRect(pt))
        {
            SetCurSel(i);
   CMenu temp,*ptr;
            temp.LoadMenu(IDR_MENU1);
            ptr = temp.GetSubMenu(0);
            ClientToScreen(&pt);
            ptr->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON,pt.x,pt.y,GetParent());


           break;
        }
    }

 

這樣就做到了讓右鍵點擊一行並刪除的效果。

 

 

第三步,建立一個Listbox控件,並最終完成其刪除的功能

1、從工具欄建立一個listbox控件並且在類嚮導裏更改其基類,如下圖:

 

IDC_LIST2就是我創建的listbox控件。

 

 

 

 

 

綜合以上三步,我們就完成了這個Listbox右鍵的功能了。

發佈了9 篇原創文章 · 獲贊 8 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章