ようこそ ゲスト さん、新規登録(無料)して気になる疑問を解決しませんか?

質問

質問者:nyororo-n チェックボックス付きツリービュー
困り度:
  • 暇なときにでも
お世話になっております。
WINAPIにて、チェックボックスつきのツリービューを作っているのですがした処理が出来なくて困っております。(環境:BCC)
わかる方がおられれば答えてもらえないでしょうか?
親アイテムにチェックが付いたとき、子アイテム全てにチェックがつく。(Exceの日付フィルタと同じ動作)
子ウィンドウのチェックが一個でもはずれると親ウィンドウのチェックが■とかになるようにするにはどのようにすれば出来るのでしょうか?
(全部はずれると、親のチェックもはずれる)

下記サイトを参照した限りではツリービュー自体はそんな処理はしてくれなさそうなのですが。
サブクラス化とかして、チェックイベント拾って、子ウィンドウにもチェックいれるとかの処理を自作しないといけないのでしょうか?
http://yokohama.cool.ne.jp/chokuto/urawaza/api/index.html
質問投稿日時:08/03/27 22:40
質問番号:3900528

回答

 

回答者:Wr5 チェックボックスの状態が変わったりすると、親ウィンドウに
TVN_ITEMCHANGEDやTVN_ITEMCHANGINGが飛んできます。
そのメッセージを契機にHTREEITEMから、
TreeView_GetCheckState()で該当のアイテムのチェックボックスの状態が取得できます。(NMTVITEMCHANGE構造体のuStateNewからも取れると思いますが)
さらに、TreeView_GetChild()で子が、TreeView_GetParent()で親が、TreeView_GetNextSibling()/TreeView_GetPrevSibling()で兄姉が取得できますので、
順次チェックボックスの状態の取得やTreeView_SetCheckState()/TreeView_SetItemState()でチェックボックスの設定が可能かと思います。

TreeView_SetItemState()のstateでINDEXTOSTATEIMAGEMASK()を使うことでチェックボックスのグレー表示なども可能かと。

# ListViewはそこそこ触ったことありますが、TreeViewはあまりさわったことないので、詳しい処理内容はちょっと…
# 検索時のキーワードにくらいはなるでしょうか。
種類:アドバイス
どんな人:一般人
自信:参考意見
回答日時:08/03/28 00:31
回答番号:No.1
この回答への補足この回答に補足をつける(質問者のみ)
この回答へのお礼回答ありがとうございます、ちょっと頑張ってみようと思います。