tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
[ツリー表示へ]  [ワード検索]  [Home]

タイトル Re^3: ListItemsコレクションのIcon番号を取得
投稿日: 2009/05/12(Tue) 12:51
投稿者魔界の仮面弁士
API コードが上手く動作しないのだとしたら、その宣言部も含めて記述してください。
ByVal/ByRef の違いなど、小さな違いで動作が変わってくる可能性があるわけですし。


ちなみに、LVM_GETITEM の使い方そのものは合っていると思います。
API 宣言等が正しいのだとすれば、画像をインデックス指定している場合において、
hWnd に ListView.hWnd、lngIndex に ListItem.Index を指定することで、
>     objItem.mask = LVIF_IMAGE
>     objItem.iItem = lngIndex
>     objItem.iSubItem = 0
>     lngLength = SendMessage(hWnd, LVM_GETITEM, 0, objItem)
>     imgNo = objItem.iImage
の imgNo に「ListItem.SmallIcon - 1」または「ListItem.Icon - 1」が
入ってくるかと思います。(どちらになるかは、表示モード次第です)


> imgNo = objItem.iIndent
> objItemはLV_ITEM構造体です。
LV_ITEM に iIndent は定義されていなかったはずです。
LVITEM の間違いではありませんか?

ComCtl32.dll v4.70 以降では、(インデント等を指定できるように)拡張された LV_ITEM を
使うように定められていたかと思います。もっとも、現在のヘッダファイルでは、
旧 LV_ITEM を新 LVITEM の別名として処理しているので、LV_ITEM を使った場合にも
iIndent があるかのように見えてしまう可能性はありますけれどね。


> > ・そもそも何故、わざわざ API で取得したいのか。
> > を説明していただけ無いでしょうか。
> 現在ImageListの作成からListView及びTreeViewとの関連付け、各コレクションの登録を
> API関数に変更しようと思っています。

う〜む、それは「何故」ですか、と聞いていたつもりなのですけれども。
繰り返しの逆質問になりますが、API に変更しなければならない事情とは何でしょうか?


また、そもそも ImageList を API で作成するとなれば、その操作・管理方法は、
ActiveX コントロールの場合とは、異なる扱いとなりますよね。

API 管理の LVITEM.iImage / TVITEM.iImage / TVITEM.iSelectedImage はインデックス管理ですし、
VB6 の ListItem.Icon / Node.Image / Node.SelectedImage も、インデックス(またはキー)管理なので
イメージの管理方法や指定方法は酷似していますが、その画像や項目というのは、
Add で登録するわけでは無く、API で登録することになるわけですから、
対応付けは無意味だと思うのですけれども…。

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。