投稿日 | : 2005/02/04(Fri) 11:54 |
投稿者 | : ダンボ |
URL | : |
タイトル | : アイコン転写時の疑問 |
いつもお世話になっております。
MSFlexGridにアイコンとファイル名を列挙するという、有り勝ちなアプリケーションを
作っていますが、下記の部分の動作に納得が行かないので、どなたかご説明を願いたいです。
現象1:(*)行を実装すれば期待通りに各ファイルのアイコンがMSFlexGridの各行に表示される。
現象2:(*)行をコメントにすると、MSFlexGrid中の全アイコンが常に最後のファイルのアイコンに書き換えら
れる。
(当然.FillStyleは0で設定済み)
疑問点:Set .CellPicture = picIcon.Imageで、ビットマップ実態がMSFlexGridに転写されるのか?
それともポインタだけ複写されるのか?
現象2から見ると「ポインタだけ複写」のような気もするが、
現象1から見ると「その度にビットマップ実態が転写されている」ように思える。
For i = 1 to .Rows - 1
.Row = i: .Col = 0
rc = GetIcon(FNAME, picIcon)
If rc <> 0 Then
Set .CellPicture = picIcon.Image
(*) picIcon.Picture = LoadPicture() この行をコメントにすると全部のアイコンが同じになる。
End If
Next i
Public Function GetIcon(FNAME As String, PIC As PictureBox) As Long
Dim rc As Long, psfi As SHFILEINFO
rc = SHGetFileInfo(FNAME, FILE_ATTRIBUTES_NORMAL, psfi, Len(psfi), SHGFI_ICON +
SHGFI_SMALLICON)
rc = DrawIconEx(PIC.hDC, 0, 0, psfi.hIcon, 0, 0, vbNull, 0, DI_NORMAL)
GetIcon = rc
End Function