mirror of
https://github.com/reactos/reactos.git
synced 2024-08-28 22:28:36 +00:00
147 lines
3.4 KiB
C
147 lines
3.4 KiB
C
#include <windows.h>
|
|
#include <setupapi.h>
|
|
#include <tchar.h>
|
|
#include <stdlib.h>
|
|
#include "resource.h"
|
|
|
|
typedef BOOL (WINAPI * SH_GIL_PROC)(HIMAGELIST *phLarge, HIMAGELIST *phSmall);
|
|
typedef BOOL (WINAPI * FII_PROC)(BOOL fFullInit);
|
|
|
|
/*** Shell32 undoc'd functions ***/
|
|
/* Shell_GetImageLists @71 */
|
|
/* FileIconInit @660 */
|
|
|
|
BOOL
|
|
DisplayImageList(HWND hwnd,
|
|
UINT uID)
|
|
{
|
|
HWND hLV;
|
|
SP_CLASSIMAGELIST_DATA ImageListData;
|
|
LV_ITEM lvItem;
|
|
TCHAR Buf[6];
|
|
INT ImageListCount = -1;
|
|
INT i = 0;
|
|
|
|
hLV = GetDlgItem(hwnd, IDC_LSTVIEW);
|
|
(void)ListView_DeleteAllItems(hLV);
|
|
|
|
if (uID == IDC_SYSTEM)
|
|
{
|
|
HIMAGELIST hLarge, hSmall;
|
|
HMODULE hShell32;
|
|
SH_GIL_PROC Shell_GetImageLists;
|
|
FII_PROC FileIconInit;
|
|
|
|
hShell32 = LoadLibrary(_T("shell32.dll"));
|
|
if(hShell32 == NULL)
|
|
return FALSE;
|
|
|
|
Shell_GetImageLists = (SH_GIL_PROC)GetProcAddress(hShell32, (LPCSTR)71);
|
|
FileIconInit = (FII_PROC)GetProcAddress(hShell32, (LPCSTR)660);
|
|
|
|
if(Shell_GetImageLists == NULL || FileIconInit == NULL)
|
|
{
|
|
FreeLibrary(hShell32);
|
|
return FALSE;
|
|
}
|
|
|
|
FileIconInit(TRUE);
|
|
|
|
Shell_GetImageLists(&hLarge, &hSmall);
|
|
|
|
ImageListCount = ImageList_GetImageCount(hSmall);
|
|
|
|
(void)ListView_SetImageList(hLV,
|
|
hSmall,
|
|
LVSIL_SMALL);
|
|
|
|
FreeLibrary(hShell32);
|
|
}
|
|
else if (uID == IDC_DEVICE)
|
|
{
|
|
ImageListData.cbSize = sizeof(SP_CLASSIMAGELIST_DATA);
|
|
SetupDiGetClassImageList(&ImageListData);
|
|
|
|
ImageListCount = ImageList_GetImageCount(ImageListData.ImageList);
|
|
|
|
(void)ListView_SetImageList(hLV,
|
|
ImageListData.ImageList,
|
|
LVSIL_SMALL);
|
|
}
|
|
else
|
|
return FALSE;
|
|
|
|
lvItem.mask = LVIF_TEXT | LVIF_IMAGE;
|
|
|
|
while (i <= ImageListCount)
|
|
{
|
|
lvItem.iItem = i;
|
|
lvItem.iSubItem = 0;
|
|
lvItem.pszText = _itot(i, Buf, 10);
|
|
lvItem.iImage = i;
|
|
|
|
(void)ListView_InsertItem(hLV, &lvItem);
|
|
|
|
i++;
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
BOOL CALLBACK
|
|
DlgProc(HWND hwnd,
|
|
UINT message,
|
|
WPARAM wParam,
|
|
LPARAM lParam)
|
|
{
|
|
switch (message)
|
|
{
|
|
case WM_INITDIALOG:
|
|
DisplayImageList(hwnd, IDC_SYSTEM);
|
|
return TRUE;
|
|
|
|
case WM_CLOSE:
|
|
EndDialog(hwnd, 0);
|
|
return TRUE;
|
|
|
|
case WM_COMMAND:
|
|
{
|
|
switch(LOWORD(wParam))
|
|
{
|
|
case IDOK:
|
|
EndDialog(hwnd, 0);
|
|
return TRUE;
|
|
|
|
case IDC_SYSTEM:
|
|
DisplayImageList(hwnd, IDC_SYSTEM);
|
|
return TRUE;
|
|
|
|
case IDC_DEVICE:
|
|
DisplayImageList(hwnd, IDC_DEVICE);
|
|
return TRUE;
|
|
}
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
int WINAPI
|
|
WinMain(HINSTANCE hThisInstance,
|
|
HINSTANCE hPrevInstance,
|
|
LPSTR lpszArgument,
|
|
int nCmdShow)
|
|
{
|
|
INITCOMMONCONTROLSEX icex;
|
|
|
|
icex.dwSize = sizeof(INITCOMMONCONTROLSEX);
|
|
icex.dwICC = ICC_BAR_CLASSES | ICC_COOL_CLASSES;
|
|
InitCommonControlsEx(&icex);
|
|
|
|
return DialogBox(hThisInstance,
|
|
MAKEINTRESOURCE(IDD_IMGLST),
|
|
NULL,
|
|
(DLGPROC)DlgProc);
|
|
}
|