Initialise ou r�initialise la liste d'images du syst�me
#include <WinAPIIcons.au3>
_WinAPI_FileIconInit ( [$bRestore = True] )
$bRestore | [optionnel] Sp�cifie s'il faut restaurer le cache d'image syst�me, les valeurs valides sont: True - Restaure le cache d'image syst�me � partir du disque (par d�faut). False - Ne restaure pas. |
Succ�s: | Retourne 1. |
�chec: | Retourne 0 et d�finit @error <> 0. |
Si vous utilisez des listes d'images syst�me dans votre propre processus, vous devez appeler cette fonction au lancement de l'application, et en r�ponse � un message WM_SETTINGCHANGE lorsque le flag $SPI_SETNONCLIENTMETRICS est lev�.
Consultez FileIconInit dans la librairie MSDN.
#include <GUIConstantsEx.au3> #include <GuiImageList.au3> #include <SendMessage.au3> #include <StaticConstants.au3> #include <WinAPIGdi.au3> #include <WinAPIGdiDC.au3> #include <WinAPIHObj.au3> #include <WinAPIIcons.au3> #include <WinAPIShPath.au3> ; Initialisation la liste d'images syst�me _WinAPI_FileIconInit() ; R�cup�re la liste d'image syst�me et calcule la taille du bitmap Local $hImageList = _WinAPI_ShellGetImageList() If @error Then Exit Local $iCount = _GUIImageList_GetImageCount($hImageList) Local $a_iSize = _GUIImageList_GetIconSize($hImageList) Local $iCX = Sqrt($iCount) Local $iCY If $iCX Then $iCX = Ceiling($iCX) $iCY = Ceiling($iCount / $iCX) Else $iCX = 1 $iCY = 1 EndIf Local $W = $iCX * ($a_iSize[0] + 14) Local $H = $iCY * ($a_iSize[1] + 14) ; Cr�e une GUI Local $hForm = GUICreate('Test ' & StringReplace(@ScriptName, '.au3', '()'), $W, $H) Local $idPic = GUICtrlCreatePic('', 0, 0, $W, $H) Local $hPic = GUICtrlGetHandle($idPic) ; Cr�e un bitmap Local $hDC = _WinAPI_GetDC($hPic) Local $hMemDC = _WinAPI_CreateCompatibleDC($hDC) Local $hBitmap = _WinAPI_CreateCompatibleBitmap($hDC, $W, $H) Local $hMemSv = _WinAPI_SelectObject($hMemDC, $hBitmap) ; Dessine toutes les ic�nes de la liste d'images syst�me dans un bitmap Local $iIndex = 0 For $y = 1 To $iCY For $x = 1 To $iCX _GUIImageList_Draw($hImageList, $iIndex, $hMemDC, ($x - 1) * ($a_iSize[0] + 14) + 7, ($y - 1) * ($a_iSize[0] + 14) + 7) $iIndex += 1 If $iIndex >= $iCount Then ExitLoop EndIf Next Next ; Lib�re les objets _WinAPI_ReleaseDC($hPic, $hDC) _WinAPI_SelectObject($hMemDC, $hMemSv) _WinAPI_DeleteDC($hMemDC) ; D�finit le bitmap dans le contr�le Picture _SendMessage($hPic, $STM_SETIMAGE, 0, $hBitmap) Local $hObj = _SendMessage($hPic, $STM_GETIMAGE) If $hObj <> $hBitmap Then _WinAPI_DeleteObject($hBitmap) EndIf ; Affiche la GUI GUISetState(@SW_SHOW) Do Until GUIGetMsg() = $GUI_EVENT_CLOSE