1. 程式人生 > >獲取ListControl控制元件中(複選框)CheckBox的狀態

獲取ListControl控制元件中(複選框)CheckBox的狀態

轉載:http://blog.chinaunix.net/uid-20680966-id-1896376.html
推薦:簡單明瞭的例子,適合入門,剩下的就是自由發揮了。
注:LVN_ITEMCHANGED 某個項已經發生變化。
如果使用VS2010或更高版本,字元一般預設Unicode,做下面的例子時,注意使用_T(” “) 或L轉換字串。
CListCtrl控制元件主要事件及LVN_ITEMCHANGED訊息和滑鼠雙擊列表項事件的處理:https://www.cnblogs.com/hongfei/archive/2012/12/25/2832806.html

/————————-下面為轉載原文—————————–

/
1 建立測試工程
新建一個對話方塊工程,並新增一個CListCtrl控制元件,並關聯一個成員變數m_List。
2 設定LVS_EX_CHECKBOXES風格
ListView_SetExtendedListViewStyle(m_List.GetSafeHwnd(), m_List.GetExStyle() | LVS_EX_CHECKBOXES);
3 為listctrl新增測試項
在OnInitDialog()中新增如下程式碼:
m_List.InsertColumn(0,”Name”,LVCFMT_LEFT,150);
m_List.InsertColumn(1,”Sex”,LVCFMT_LEFT,200);
m_List.InsertItem(0, “ZhangSan”);
m_List.InsertItem(1, “LiSi”);
4 新增控制元件通知訊息
為ListCtrl控制元件新增LVN_ITEMCHANGED訊息。系統生成如下程式碼:
void CXXXDlg::OnLvnItemchangedList1(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMLISTVIEW pNMLV = reinterpret_cast(pNMHDR);
// TODO: Add your control notification handler code here

*pResult = 0;
}

5 在LVN_ITEMCHANGED訊息處理函式中新增程式碼如下:
void CXXXDlg::OnLvnItemchangedList1(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMLISTVIEW pNMLV = reinterpret_cast(pNMHDR);
// TODO: Add your control notification handler code here

/*
typedef struct tagNMLISTVIEW
{
NMHDR hdr;
int iItem;
int iSubItem;
UINT uNewState;
UINT uOldState;
UINT uChanged;
POINT ptAction;
LPARAM lParam;
} NMLISTVIEW, *LPNMLISTVIEW;
*/
if((pNMLV->uOldState & INDEXTOSTATEIMAGEMASK(1)) /* old state : unchecked */
&& (pNMLV->uNewState & INDEXTOSTATEIMAGEMASK(2)) /* new state : checked */
)
{
TRACE(“Item %d is checked\n”, pNMLV->iItem);
}
else if((pNMLV->uOldState & INDEXTOSTATEIMAGEMASK(2)) /* old state : checked */
&& (pNMLV->uNewState & INDEXTOSTATEIMAGEMASK(1)) /* new state : unchecked */
)
{
TRACE(“Item %d is unchecked\n”, pNMLV->iItem);
}
else
{
TRACE(“Item %d does’t change the check-status\n”, pNMLV->iItem);
}

*pResult = 0;
}

6 除錯
在debug環境下,改變checkbox的選中狀態,檢視輸出資訊。
OK.