Sorry this took a while
Ok, Small Icons:
These will be a little more complex, you will need to use two more windows APIs:
ExtractIconEx (instead of ExtractIconEx)
DrawIconEx (instead of DrawIcon)
These functions do basically the same thing, but they are capable of much more. ExtractIconEx can extract any number of Icons into two arrays
(although in the example below I’ve only used two long variables “lngSmall” and “lngLarge”). DrawIconEx will allow you to draw the small icon as a 16 X 16 image instead of 32 X 32. This is just a small example of how to use the two functions, hopefully you can see how to alter the origional code. You will need:
two picture boxes (to receve the images)
an icon (in the code Ive used the path "C:\1.ico")
A command button (the subroutine is "command1_CLick()")
So for some code:
Code:Private Declare Function ExtractIconEx Lib "shell32.dll" Alias "ExtractIconExA" (ByVal lpszFile As String, ByVal nIconIndex As Long, phiconLarge As Long, phiconSmall As Long, ByVal nIcons As Long) As Long
Private Declare Function DestroyIcon Lib "user32.dll" (ByVal hIcon As Long) As Long
Private Declare Function DrawIconEx Lib "user32.dll" (ByVal hDC As Long, ByVal xLeft As Long, ByVal yTop As Long, ByVal hIcon As Long, ByVal cxWidth As Long, ByVal cyWidth As Long, ByVal istepIfAniCur As Long, ByVal hbrFlickerFreeDraw As Long, ByVal diFlags As Long) As Long
Private Const DI_NORMAL = &H3 'Draw both the image mask in image data
Private Const DI_DEFAULTSIZE = &H8 'Draw the icon at 32 X 32
Private Sub Command1_Click()
Dim Retval As Long, lngLarge As Long, lngSmall As Long, hbrush As Long
' \/firstIcon \/Number of icons
Retval = ExtractIconEx("C:\1.ico", 0, lngLarge, lngSmall, 1)
Retval = DrawIconEx(Picture1.hDC, 0, 0, lngLarge, 0, 0, 0, 0, DI_NORMAL Or DI_DEFAULTSIZE)
'note: DI_DEFAULTSIZE tells windows to ignore the two parameters after "lngLarge".
Retval = DrawIconEx(Picture2.hDC, 0, 0, lngSmall, 16, 16, 0, 0, DI_NORMAL)
'"16,16 tells windows to draw the Icon 16 X 16 pixals
' left top Icon width height for drawing animated cursors brush type Flags
'Retval = DrawIconEx(Picture2.hDC, 0, 0, lngSmall, 16, 16, 0, 0, DI_NORMAL)
Retval = DestroyIcon(lngLarge) 'As in the article
Retval = DestroyIcon(lngSmall)
End Sub
To get ExatractIconEx to retrieve more than one Icon, replace lngLarge and lngSmall with arrays and set the last parameter “nIcons” to the number of icons to extract.
If this isn't clear just say so.