- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:CTreeCtrlでアイコンが変化しない)
CTreeCtrlでアイコンが変化しない
このQ&Aのポイント
- MSVC++6.0&MFCの環境で、CTreeCtrlを使用してツリーコントロールのアイコンをエクスプローラのフォルダのように開閉する際に、アイコンが変化しない問題が発生しています。
- OnItemexpanded関数を使用して、ツリービューアイテムが展開または収束したときにアイコンを変更しようとしています。
- しかし、アイコンは変わらず、表示される文字列は正しく表示されます。解決策をご存知の方は教えてください。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
レスがないようなので、ご参考になれば。 MFC でやったことはありませんが、 >>アイコンが変化しません。 とあることは、非選択状態ではアイコンは表示されているのですか。 API プログラムではアイコンを変化させるには、hItem の mask に アイコンを2種類登録する指定(TVIF_IMAGE | TVIF_SELECTEDIMAGE)をして、 アイコンデータを ImageList に登録し、その番号を hItem の iImage, iSelectedImage にセットしています。 で、notify が来たとき決める場合は iImage も iSelectedImage も -1 にしてnotify を送るようにしておき、 notify 処理で、image 番号を指定しています。 CTreeCtrl にそれぞれのメソッドがあるでしょう。
お礼
回答どうもありがとうございます。 実は、別の方法で解決していました。 一定時間たたないと、質問を削除できないようなので...。 次のようにすると、うまくいきました。 void MyTreeCtrl::OnItemexpanded(NMHDR* pNMHDR, LRESULT* pResult) { NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR; // TODO: この位置にコントロール通知ハンドラ用のコードを追加してください if(pNMTreeView->action == TVE_EXPAND){ pNMTreeView->itemNew.iImage = 1; pNMTreeView->itemNew.iSelectedImage = 1; SetItem(&pNMTreeView->itemNew); }else{ pNMTreeView->itemNew.iImage = 0; pNMTreeView->itemNew.iSelectedImage = 0; SetItem(&pNMTreeView->itemNew); } *pResult = 0; }