掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
CListCtrlなどの派生クラスの使いかた (ID:70712)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
> つまり、リストコントロールに実体を管理させてはならないのです。 > 当たり前ですね(^^)。 アプリ内の複数のダイアログに置かれることを想定しているため、 CListCtrlを派生し、コントロール自身でデータを探して表示するようにし、 使う側はその派生クラスをダイアログに持つだけという実装をしたのですが、 こういうことはせずに、CListCtrlのまま使い、 ダイアログ側に毎回同じ準備処理を置くべきということでしょうか。 > アイテムの削除がなされた際 > LVN_DELETEALLITEMS > LVN_DELETEITEM > が WM_NOTIFY 経由で通知されるので其処で開放してやれば良い。 外からは追加や削除をしないでほしいというのが実現したいことなのです。 説明が足りませんでした。失礼しました。 > 動作を大きくカスタマイズしていると > InsertItemなんかはたとえvirtualであっても > 呼ばれては困るかもしれませんね。 過去に同じような方法でフォント名選択コンボボックスなどを 作ったこともありますが、このときも同じような疑問を持ちました。 このときは文字列のみのアイテムで、ポインタなどは絡んでいなかったので、 勝手に追加や削除をされても大して痛くありませんでしたが。 > CListCtrlから派生せずCWndから派生して > CListCtrlの変数をメンバに持つようにするとか。 > 必要な実装をいちいち用意しなくてはいけないのは面倒だけど > 堅牢性は高くなります。 この方法も考えて作ってみたのですが、 コントロールのイベント(LVN_ITEMCHANGEDなど)などが リストコントールの仕組みのまま親ウィンドウに渡らなくなり、 ダイアログにもリストコントロールのまま置けなってしまいました。 こういうところもすべて用意してあげないといけないのでしょうけど、 ネットを探してもこういう使い方をしている例が出てこないということは、 やはりこの手のコントロールを作るときには ・InsertItemは禁止 ・DeleteAllItemsやDeleteItemも禁止 というようなコメントを入れることになるのでしょうか。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.