質問: ctreectrlで、あるノード以下だけを無効にしたい おせわになります。 c++6.0 mfc で開発しております。 現在,ctreectrlで、下記のような画像付き(●:画像)のツリーを表示しています。 それぞれのノードをクリックすると、画像:●が★に変わります。 ●a-●a_b -●a_c -●a_c_1 -●a_c_2 そこで、a_c_1のノードだけを無効(バックに灰色がかかったような状態で、クリックしても反応しない。)にしたいのですが、どのようにすればよいでしょうか? また、一つのノードだけ、無効にすることができないのであれば、 画像(●)とテキスト内容(a_c_1)を灰色をかけるにはどのようにすればよいでしょうか? お手数ですが、なにとぞよろしくお願いします。
回答: >それぞれのノードをクリックすると、画像:●が★に変わります。 別のノードをクリックすると、画像はどうなるのでしょう? では、本題。 >そこで、a_c_1のノードだけを無効(バックに灰色がかかったような状態で、クリックしても反応しない。)にしたいのですが、どのようにすればよいでしょうか? 無効表示(グレー表示)にする場合、画像の方は予め用意してimagelistに入れておくことになるかと思います。 クリックに反応しない。というのが、どこまでのことを指すのが不明ですが... tvn_itemchangingかtvn_selchangingのハンドラ作成して、trueを返却することで変更/選択をキャンセルすることができるかと。 # 親ウィンドウのonnotify()で処理...でしょうか。 >また、一つのノードだけ、無効にすることができないのであれば、 >画像(●)とテキスト内容(a_c_1)を灰色をかけるにはどのようにすればよいでしょうか? 画像については先の通り。 テキスト内容に関してはカスタムドローで対応できるかと思われます。 http://www.kumei.ne.jp/c_lang/sdk3/sdk_262.htm こちらも親ウィンドウのonnotify()でしょうか... dwdrawstageがcdds_prepaintの時にcdrf_notifyitemdrawを返却すると、各ノードの描画の際に通知が来ます。 dwitemspecに対象ノードのhtreeitemが入って通知されるようですので、 getitem()なりでノードを取得可能でしょう。 その上で、clrtextとclrtextbkに色を設定すればよろしいかと。 # enablewindow()相当ならば...getsyscolor()辺りで取得できます。