ほわいとのプログラム
Section 12 ・・・ リストビューのクリック位置を取得

リストビューをクリックすると,WM_NOTIFYメッセージが送られてきますが,そのときにさてどの項目をクリックしたのかを知りたいことがあります.

それを知るには,ListView_SubItemHitTestマクロを使います.

(ダイアログプロシージャの中を想定しています)

    ...
    case WM_NOTIFY:
      //// 通知メッセージ
      LV_DISPINFO	*lvInfo = (LV_DISPINFO *)lParam;
      switch ( (int)wParam ) {
      case IDC_CHECK_LIST:
        // メンバリスト
        switch ( lvInfo->hdr.code ) {
        case NM_CLICK:
          // シングルクリック
          LVHITTESTINFO	lvHitInfo;
          GetCursorPos(&lvHitInfo.pt);
          ScreenToClient(hListWnd, &lvHitInfo.pt);
          ListView_SubItemHitTest(hListWnd, &lvHitInfo);
          // lvHitInfo.iItem     行番号
          // lvHitInfo.iSubItem  列番号
          break;
        }
      }
      break;
    ...
    

このようにして,LVHITTESTINFO構造体の.ptにクライアント座標系のカーソルポジションを設定しておけば,クリックした(マウスカーソル位置の)行と列が得られます. クリックした場所が範囲外であれば,どちらも-1が帰ってきます.

最終更新日時 : 2013年 9月23日(月) 14時 8分32秒