電子書籍の厳選無料作品が豊富!

おせわになります。
C++6.0 MFC で開発しております。

現在,CTreeCtrlで、下記のような画像付き(●:画像)のツリーを表示しています。
それぞれのノードをクリックすると、画像:●が★に変わります。

●A-●A_b
  -●A_c
    -●A_c_1
     -●A_c_2
            

そこで、A_c_1のノードだけを無効(バックに灰色がかかったような状態で、クリックしても反応しない。)にしたいのですが、どのようにすればよいでしょうか?

また、一つのノードだけ、無効にすることができないのであれば、
画像(●)とテキスト内容(A_c_1)を灰色をかけるにはどのようにすればよいでしょうか?

お手数ですが、なにとぞよろしくお願いします。

A 回答 (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()辺りで取得できます。
    • good
    • 0
この回答へのお礼

ご返事ありがとうございます。

Ctreectrlのメンバ関数では、やはりそのようなのはないのですね。。。

教えて頂いた方法をためします。

ありがとうございます。

お礼日時:2010/02/05 13:49

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!