掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
リストビューにアイコンを表示するには? (ID:85059)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
サンプルプログラムの説明。 ・SHGetSpecialFolderLocation関数 特殊フォルダのITEMIDLIST構造体へのポインタを取得します。 第1引数は、この関数を実行するアプリケーションのウィンドウハンドルを設定します。フォームのウィンドウハンドルでかまいません。 第2引数には、特殊フォルダを示す定数(CSIDL_XXXX)を設定します。 第3引数には、取得するためのLong型変数を設定します。 SHGetSpecialFolderLocation関数を実行すると、第3引数に設定した変数にポインタが取得されます。 ITEMIDLIST構造体は、ITEMIDLISTでグーグルなどで検索すると詳しい情報が得られます。 つまりは、指定した特殊フォルダが、ITEMIDLISTのどの位置なのかをポインタ(pIDL)で取得する関数です。 ・SHGetFileInfo関数 ファイルまたはフォルダに関する情報を取得します。 取得できる情報は、SHFILEINFO構造体の定義を見るとわかるとおり Private Type SHFILEINFO hIcon As Long '関連付けされているアイコンのハンドル iIcon As Long '関連付けされているアイコンのシステムイメージリストでのインデックス値 dwAttributes As Long '属性 szDisplayName As String * 260 '表示名 'フォルダのみ、フォルダ名と表示名が違う場合設定されている。 'たとえば、"マイドキュメント"というフォルダは、実際のフォルダ名は"My Document"である。 'この"マイドキュメント"という文字列がここに入る。 szTypeName As String * 80 'タイプ End Type です。 第一引数は、情報を取得したいファイルまたはフォルダのフルパス(String型)を本来設定するのですが、 今回は、特殊フォルダの情報を取得するため、SHGetSpecialFolderLocationで取得したITEMIDLISTへのポインタ(Long型)を 設定しています。 第2引数は取得するファイルの属性のマスク値を設定します。第5引数にSHGFI_USEFILEATTRIBUTESが含まれているときのみ有効です。 第3引数は取得するSHFILEINFO構造体の変数を設定します。関数を実行するとこの変数に情報が取得されます。 第4引数はSHFILEINFO構造体(変数)のバイト数を設定します。 第5引数は取得したい情報のフラグを設定します。フラグはビットデータですので複数設定する場合は Or 演算子を使用します。 SHGFI_ICON '関連付けされているアイコンのハンドルを取得 SHGFI_SYSICONINDEX '関連付けされているアイコンのシステムイメージリストでのインデックスを取得 SHGFI_LARGEICON '関連付けされているアイコンの情報を取得時に大きいアイコンの情報を取得する。(SHGFI_ICONまたはSHGFI_SYSICONINDEXと組み合わせて使用) SHGFI_SMALLICON '同じく小さいアイコンの情報を取得 SHGFI_SHELLICONSIZE '(Shell(システム)での)規定サイズのアイコンの情報を取得 SHGFI_PIDL 'ITEMIDLISTへのポインタを使用して情報を取得 SHGFI_DISPLAYNAME '表示文字列を取得 SHGFI_USEFILEATTRIBUTES'ファイル属性を取得 SHGFI_TYPENAME 'タイプを取得("システム フォルダ"・"ファイル フォルダ"といったタイプ名が取得される) SHGFI_EXETYPE '実行ファイルの種類を取得 '(SHGetFileInfo関数の戻り値(Long型)として取得。値によってWindowsアプリ・MS-DOSアプリ・Win32コンソールアプリかを判断できる) ・OleCreatePictureIndirect関数 PICDESC構造体(サンプルプログラムではIconType構造体)に設定した情報を元にピクチャーオブジェクトを作成。 第1引数は情報を設定したPICDESC構造体を設定します。 第2引数はIDispatchインタフェースのGUIDを設定します。 第3引数は取得するピクチャーオブジェクトのインタフェース変数を設定します。(サンプルではピクチャーオブジェクトのクラスにあわせてIpictureDispとしている) これらの関数を使用してアイコンを取得しています。 サンプルプログラムの流れは、 SHGetSpecialFolderLocation関数にて特殊フォルダのITEMIDLISTへのポインタを取得。 SHGetFileInfo関数でポインタを元に関連付けられているアイコンのハンドルを取得。 OleCreatePictureIndirect関数で取得したアイコンハンドルを元にピクチャーオブジェクトを作成して、 作成したピクチャーオブジェクトをリストビューに関連付けしているイメージリストに追加。 追加後、リストビューにアイテムを追加。 という流れです。 リストビューにイメージリストを設定する場合、何もイメージ(画像)ないイメージリストを設定しようとすると 初期化されていないというエラーが発生しますので、イメージリストに1つ追加したとき(ImgCnt = 1)に設定しています。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.