タイトル : 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 で登録することになるわけですから、 対応付けは無意味だと思うのですけれども…。 |