ツリービューに複数のアイコン

ActiveBasicでのプログラミングでわからないこと、困ったことなどがあったら、ここで質問してみましょう(質問を行う場合は、過去ログやWeb上であらかじめ問題を整理するようにしましょう☆)。
返信する
メッセージ
作成者
C1000
記事: 185
登録日時: 2006年5月07日(日) 17:16
お住まい: 宮城県
連絡する:

ツリービューに複数のアイコン

#1 投稿記事 by C1000 »

ツリービューの親アイテムと子アイテムに別々のアイコンを描画するにはどうすればいいのでしょうか?
ノッチ
記事: 82
登録日時: 2005年6月01日(水) 23:27
お住まい: 北海道札幌市

Re: ツリービューに複数のアイコン

#2 投稿記事 by ノッチ »

> ツリービューの親アイテムと子アイテムに別々のアイコンを描画するにはどうすればいいのでしょうか?

流れとしては、
1) イメージリストの作成
2) イメージリストの割り当て
3) イメージリストの選択
でしょうか。

1はビットマップをイメージリストに変更等々、ググれば出てきます。
(ImageList_Create、ImageList_Addあたり)

2はTVM_SETIMAGELISTでSendMessage。

3はTVITEM構造体のmaskにTVIF_IMAGEを入れて、iImageとiSelectedImageで
使用するIndexを指定します。

こんな感じです。
C1000
記事: 185
登録日時: 2006年5月07日(日) 17:16
お住まい: 宮城県
連絡する:

#3 投稿記事 by C1000 »

親アイテムのアイコンを設定しようとコードを組んでみましたがアクセス違反が起きます。どこが悪いのでしょうか?

コード: 全て選択

    'イメージリストを作成
	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)
7
記事: 473
登録日時: 2005年5月31日(火) 18:51
お住まい: 新潟県
連絡する:

#4 投稿記事 by 7 »

> 親アイテムのアイコンを設定しようとコードを組んでみましたがアクセス違反が起きます。どこが悪いのでしょうか?
実際に動かしてないのですが、こうしてみては如何でしょう? TVITEM構造体のポインタ型を宣言してもそのまま使える訳ではありません。mallocやcallocでメモリを確保してやる必要が有ります。
TVITEM構造体のポインタを格納する場合は、mallocやcallocしなくても良かったと思うんですけどね。
C1000
記事: 185
登録日時: 2006年5月07日(日) 17:16
お住まい: 宮城県
連絡する:

#5 投稿記事 by C1000 »

親アイテムのアイコンは出来たのですが、子アイテムのすべてに設定するにはどうすればいいのでしょうか
最後に編集したユーザー C1000 [ 2006年8月12日(土) 09:27 ], 累計 1 回
7
記事: 473
登録日時: 2005年5月31日(火) 18:51
お住まい: 新潟県
連絡する:

#6 投稿記事 by 7 »

> 親アイテムのアイコンは出来たのですが、子アイテムのすべてに設定するにはどうすればいいのでしょうか
調べるのも面倒で想像のお話ですが、TVM_ROOTTVGN_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」の「ツリービューの使い方」っていう項目です。
C1000
記事: 185
登録日時: 2006年5月07日(日) 17:16
お住まい: 宮城県
連絡する:

#7 投稿記事 by C1000 »

試してみましたが、うまくいきませんでした。できればエクスプローラのツリービューのようにしたいのですが...あとTVGN_CHILDは指定されたアイテムが持つ最初の子アイテムを取得するようです。
返信する