none
CListCtrl の行クリックで起きる 行の再描画を無視したい (VS2010/VC++/MFC) RRS feed

  • 質問

  • VisualStudio2010、VC++MFCで開発しています。

    CDialogの中にCListCtrlを置いてOwnerDrawで行をまたがった様な描画を行っています。(CListCtrlの複数行をまとめた大きさの画像を貼ったり、文字描画したりしています)

    行をマウスクリックするとその行だけ再描画されるようで表示がおかしくなりますので、行選択を全て無視したいと思っています。

    CListCtrlをDisableにするとスクロールが効かなくなるので これは使えません。

    ON_NOTIFYのNM_CLICK/NM_DBLCLK/NM_RCLICK で*pResult = TRUEを返すようにしましたがだめでした。

    LVN_ITEMCHANGING/LVN_ITEMCHANGED で選択時は *pResult = 1 それ以外は *pResult = 0 にしましたがダメでした。


    行選択で起こる行の再描画を全て無視する方法はありますでしょうか?

    2016年8月2日 12:57

回答

  • 自己解決Resです。

    PreTranslateMessage でCListCtrl上のマウスイベントを全て無視したら目的の動作になりました。

    なぜかこの方法でもスクロールのマウスイベントは受け付けてくれるので、スクロールもできました。

    • 回答としてマーク 星 睦美 2016年9月20日 8:22
    2016年8月2日 13:19

すべての返信

  • すみません、まずはアイディアだけですが、CListCtrlを継承したコントロールクラスを作成し、WM_LBUTTONDOWNやWM_LBUTTONUPなどを処理しないようにしてみてはいかがでしょうか?
    2016年8月2日 13:13
  • ありがとうございます。

    これは考えたのですが、これだけのために継承するのはどうか と思い、もっと良い方法がないか調査しています。

    2016年8月2日 13:17
  • 自己解決Resです。

    PreTranslateMessage でCListCtrl上のマウスイベントを全て無視したら目的の動作になりました。

    なぜかこの方法でもスクロールのマウスイベントは受け付けてくれるので、スクロールもできました。

    • 回答としてマーク 星 睦美 2016年9月20日 8:22
    2016年8月2日 13:19