リストコントロールのチェックのイベントをとるには

解決


塩酸  2003-09-21 17:09:59  No: 52169  IP: [192.*.*.*]

VC++6 MFCです。
CListCtrl に SetExtendedStyle(LVS_EX_CHECKBOXES) でチェックボックスを付けています。
各アイテムのチェック状態が変更されたイベントはどうやって取ればいいのでしょうか。

NM_CLICK時に全アイテムのGetCheck(nItem)で調べようと思いましたが、
チェックが切り替わる直前に(NM_CKICKの)イベントが飛んでくるようで、正確なチェック状況を判断できませんでした。

編集 削除
ぴのきよ  2003-09-22 12:07:02  No: 52170  IP: [192.*.*.*]

こんな感じでとれるみたいです。
----------------------------------------------------
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);
}
----------------------------------------------------

編集 削除
塩酸  2003-09-22 16:58:01  No: 52171  IP: [192.*.*.*]

回答ありがとうございます。
うまくいきました。
LVN_ITEMCHANGED  を使えばよいという話ですね。

編集 削除