MFC listBox 實現右鍵單擊事件

NO IMAGE

轉自:http://blog.csdn.net/a466804006/article/details/6907791

恩 ,大家好。我用的是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控制元件。