VC++6 MFCです。
CListCtrl に SetExtendedStyle(LVS_EX_CHECKBOXES) でチェックボックスを付けています。
各アイテムのチェック状態が変更されたイベントはどうやって取ればいいのでしょうか。
NM_CLICK時に全アイテムのGetCheck(nItem)で調べようと思いましたが、
チェックが切り替わる直前に(NM_CKICKの)イベントが飛んでくるようで、正確なチェック状況を判断できませんでした。
こんな感じでとれるみたいです。
----------------------------------------------------
LRESULT CtestDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
// TODO: この位置に固有の処理を追加するか、または基本クラスを呼び出してください
LPNMLISTVIEW pnmlist;
NMHDR* hdr;
UINT newimage;
switch(message)
{
case WM_NOTIFY:
hdr = (NMHDR*)lParam;
if (hdr->hwndFrom==GetDlgItem(IDC_LIST1)->m_hWnd)
{
pnmlist = (LPNMLISTVIEW)lParam;
switch(hdr->code)
{
case LVN_ITEMCHANGED:
if ((newimage = pnmlist->uNewState & LVIS_STATEIMAGEMASK)
!=(pnmlist->uOldState & LVIS_STATEIMAGEMASK))
{
if (newimage == INDEXTOSTATEIMAGEMASK(2))
TRACE("%dのチェックされた\n", pnmlist->iItem);
else if (newimage == INDEXTOSTATEIMAGEMASK(1))
TRACE("%dのチェックが外された\n", pnmlist->iItem);
}
break;
}
}
}
return CDialog::WindowProc(message, wParam, lParam);
}
----------------------------------------------------
回答ありがとうございます。
うまくいきました。
LVN_ITEMCHANGED を使えばよいという話ですね。