CListCtrl的主要事件及鼠標響應函數

LVN_BEGINDRAG 鼠標左鍵正在被觸發以便進行拖放操作(當鼠標左鍵開始拖拽列表視圖控件中的項目時產生)

LVN_BEGINRDRAG 鼠標右鍵正在被觸發以便進行拖放操作(當鼠標右鍵開始拖拽列表視圖控件中的項目時產生)

LVN_BEGINLABELEDIT 開始編輯項的文本

LVN_COLUMNCLICK 單擊列(當鼠標單擊列表視圖控件列標題時產生)

NM_CLICK 當鼠標單擊列表視圖控件時產生

LVN_COLUMNCLICK 單擊列

LVN_DELETEALLITEMS 刪除所有項

LVN_DELETEITEM 刪除某個項

NM_DBLCLK 當鼠標雙擊列表視圖控件時產生

LVN_ENDLABELEDIT 結束對項文本的編輯

LVN_GETDISPINFO 請求需要顯示的信息

LVN_GETINFOTIP 請求顯示在工具提示窗口內的附加的文本信息

LVN_HOTTRACK 鼠標滑過某個項

LVN_INSERTITEM 當向列表視圖控件插入項目時產生

lVN_ITEMACTIVATE 激活某個項

LVN_ITEMCHANGED 某個項已經發生變化

LVN_ITEMCHANGING 某個項目正在發生變化

NM_KILLFOCUS 當視表列圖控件失去焦點時產生

LVN_KEYDOWN 某個鍵被按下

LVN_MARQUEEBEGIN 開始某個邊框選擇

NM_OUTOFMEMORY 當內存溢出時產生

LVN_ODCACHEHINT 虛擬列表控件的顯示區域的內容發生了變化

LVN_ODSTATECHANGED 虛擬列表的控件的某個項或某個範圍內的項已經發生變化

LVN_ODFINDITEM 需要擁有者查找一個特定的回調項

NM_RCLICK 當鼠標右鍵單擊列表視圖控件時產生

NM_RDBLCLK 當鼠標右鍵雙擊列表視圖控件時產生

NM_SETFOCUS 當列表視圖控件獲得焦點時產生

LVN_SETDISPINFO 父窗口必須更新控件爲項所維護的信息

註解:

HDN:Header Notify
LVN:ListView control Notify 
NM:Notify Message
TVN:TreeView control Notify

例如:

LVN_ITEMCHANGED事件消息的處理

在。cpp中找到下面兩段,在它們之間添加加粗的那一句,第三個參數是函數名,可以自己隨意寫

BEGIN_MESSAGE_MAP()

                ON_NOTIFY(LVN_ITEMCHANGED,   IDC_LIST1,   OnItemchangedList1)

END_MESSAGE_MAP()

在。h中添加  afx_msg void OnItemchangedList1(NMHDR* pNMHDR, LRESULT* pResult)這一句,算是函數聲明。

在。cpp中添加函數:

void C***Dlg::OnItemchangedList(NMHDR* pNMHDR, LRESULT* pResult) 
{
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;

if(pNMListView->uChanged==LVIF_STATE)
{
if(pNMListView->uNewState & LVIS_SELECTED)
   {
    //處理內容
    int nItem=pNMListView->iItem;
    CString value[6];
    for(int i=0;i<6;i++)
    {
     value[i]=m_List.GetItemText(nItem,i);
    }
   }
}

*pResult = 0;
}

消息處理函數中的兩個if條件句一定要有,否則可能出現多次進入處理內容的問題。

 

 

鼠標雙擊列表項事件的處理

響應NM_DBLCLK消息:

void CDisSalaryDlg::OnDblclkList(NMHDR* pNMHDR, LRESULT* pResult) 
{
NM_LISTVIEW *pNMListView=(NM_LISTVIEW *)pNMHDR;

int nItem=pNMListView->iItem;
if(nItem>=0 && nItem<m_List.GetItemCount())            //判斷雙擊位置是否在有數據的列表項上面
{
    .............
}

*pResult = 0;
}

消息處理函數中的if語句很重要,用於判斷雙擊位置是否在有數據的列表項上面。因爲NM_DBLCLK消息是CListCtrl控件(整體)消息,只要是在CListCtrl控件範圍之內執行此事件就會產生該消息,而不一定要在有數據的列表項上面。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章