ツリービューに複数のアイコン
ツリービューに複数のアイコン
ツリービューの親アイテムと子アイテムに別々のアイコンを描画するにはどうすればいいのでしょうか?
Re: ツリービューに複数のアイコン
> ツリービューの親アイテムと子アイテムに別々のアイコンを描画するにはどうすればいいのでしょうか?
流れとしては、
1) イメージリストの作成
2) イメージリストの割り当て
3) イメージリストの選択
でしょうか。
1はビットマップをイメージリストに変更等々、ググれば出てきます。
(ImageList_Create、ImageList_Addあたり)
2はTVM_SETIMAGELISTでSendMessage。
3はTVITEM構造体のmaskにTVIF_IMAGEを入れて、iImageとiSelectedImageで
使用するIndexを指定します。
こんな感じです。
流れとしては、
1) イメージリストの作成
2) イメージリストの割り当て
3) イメージリストの選択
でしょうか。
1はビットマップをイメージリストに変更等々、ググれば出てきます。
(ImageList_Create、ImageList_Addあたり)
2はTVM_SETIMAGELISTでSendMessage。
3はTVITEM構造体のmaskにTVIF_IMAGEを入れて、iImageとiSelectedImageで
使用するIndexを指定します。
こんな感じです。
親アイテムのアイコンを設定しようとコードを組んでみましたがアクセス違反が起きます。どこが悪いのでしょうか?
コード: 全て選択
'イメージリストを作成
Dim TVIcon As *TVITEM
Dim IMIndex[2] As Long 'アイテムのインデックス
hImageList=ImageList_Create(16,16,ILC_COLOR4 or ILC_MASK,3,0)
IMIndex[0]=ImageList_AddIcon(hImageList,LoadIcon(GetModuleHandle(0),IDI_Close))
IMIndex[1]=ImageList_AddIcon(hImageList,LoadIcon(GetModuleHandle(0),IDI_Open))
IMIndex[2]=ImageList_AddIcon(hImageList,LoadIcon(GetModuleHandle(0),IDI_Text))
SendMessage(hAny,TVM_SETIMAGELIST,0,hImageList As Long)
TVIcon->hItem=SendMessage(hAny,TVM_GETNEXTITEM,TVGN_ROOT,0) As HTREEITEM 'ここでアクセス違反
TVIcon->mask=TVIF_IMAGE
TVIcon->iImage=IMIndex[0]
TVIcon->iSelectedImage=IMIndex[1]
SendMessage(hAny,TVM_SETITEM,0,TVIcon)
> 親アイテムのアイコンを設定しようとコードを組んでみましたがアクセス違反が起きます。どこが悪いのでしょうか?
実際に動かしてないのですが、こうしてみては如何でしょう?
TVITEM構造体のポインタを格納する場合は、mallocやcallocしなくても良かったと思うんですけどね。
実際に動かしてないのですが、こうしてみては如何でしょう?
[ここをクリックすると内容が表示されます]
TVITEM構造体のポインタ型を宣言してもそのまま使える訳ではありません。mallocやcallocでメモリを確保してやる必要が有ります。コード: 全て選択
'------------------------------------------------------------
' イメージリストを作成
'------------------------------------------------------------
Dim TVIcon As *TVITEM
Dim IMIndex[2] As Long' アイテムのインデックス
hImageList=ImageList_Create(16,16,ILC_COLOR4 or ILC_MASK,3,0)
IMIndex[0]=ImageList_AddIcon(hImageList,LoadIcon(GetModuleHandle(0),IDI_Close))
IMIndex[1]=ImageList_AddIcon(hImageList,LoadIcon(GetModuleHandle(0),IDI_Open))
IMIndex[2]=ImageList_AddIcon(hImageList,LoadIcon(GetModuleHandle(0),IDI_Text))
SendMessage(hAny,TVM_SETIMAGELIST,0,hImageList As Long)
TVIcon=calloc(SizeOf(TVITEM))
TVIcon->hItem=SendMessage(hAny,TVM_GETNEXTITEM,TVGN_ROOT,0) As HTREEITEM
TVIcon->mask=TVIF_IMAGE
TVIcon->iImage=IMIndex[0]
TVIcon->iSelectedImage=IMIndex[1]
SendMessage(hAny,TVM_SETITEM,0,TVIcon)
free(TVIcon)
TVITEM構造体のポインタを格納する場合は、mallocやcallocしなくても良かったと思うんですけどね。
> 親アイテムのアイコンは出来たのですが、子アイテムのすべてに設定するにはどうすればいいのでしょうか
調べるのも面倒で想像のお話ですが、TVM_ROOTをTVGN_CHILD(だっけ?)にしてみては如何でしょう?の部分を、
親と子、別にイメージリストを設定する方法じゃないと思うんですけど、ツリービューの勉強にはなるかもしれません。
http://abfan.active.client.jp/の「Control Windows」の「ツリービューの使い方」っていう項目です。
調べるのも面倒で想像のお話ですが、TVM_ROOTをTVGN_CHILD(だっけ?)にしてみては如何でしょう?
コード: 全て選択
TVIcon->hItem=SendMessage(hAny,TVM_GETNEXTITEM,TVGN_ROOT,0) As HTREEITEM
コード: 全て選択
Dim hRoot As HTREEITEM
hRoot=SendMessage(hAny,TVM_GETNEXTITEM,TVGN_ROOT,0) As HTREEITEM
TVIcon->hItem=SendMessage(hAny,TVM_GETNEXTITEM,TVGN_CHILD,hRoot)
http://abfan.active.client.jp/の「Control Windows」の「ツリービューの使い方」っていう項目です。