diff --git a/rosapps/tests/Imagelistviewer/imagelistviewer.rbuild b/rosapps/tests/Imagelistviewer/imagelistviewer.rbuild new file mode 100644 index 00000000000..ddbcf793712 --- /dev/null +++ b/rosapps/tests/Imagelistviewer/imagelistviewer.rbuild @@ -0,0 +1,12 @@ + + 0x0501 + 0x0501 + + . + kernel32 + user32 + setupapi + comctl32 + main.c + res.rc + diff --git a/rosapps/tests/Imagelistviewer/main.c b/rosapps/tests/Imagelistviewer/main.c new file mode 100644 index 00000000000..043171b786f --- /dev/null +++ b/rosapps/tests/Imagelistviewer/main.c @@ -0,0 +1,145 @@ +#include +#include +#include +#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); +} diff --git a/rosapps/tests/Imagelistviewer/res.rc b/rosapps/tests/Imagelistviewer/res.rc new file mode 100644 index 00000000000..161c59a4300 --- /dev/null +++ b/rosapps/tests/Imagelistviewer/res.rc @@ -0,0 +1,14 @@ +#include +#include +#include "resource.h" + +IDD_IMGLST DIALOGEX 6,6,303,216 +CAPTION "Imagelist Viewer" +FONT 8, "MS Sans Serif", 0, 0 +STYLE WS_BORDER | WS_VISIBLE | WS_SYSMENU +BEGIN + CONTROL "", IDC_LSTVIEW, "SysListView32", WS_CHILD | WS_VISIBLE | WS_BORDER | LVS_LIST | LVS_SMALLICON | LVS_SHAREIMAGELISTS, 0, 0, 302, 200 + DEFPUSHBUTTON "System IL", IDC_SYSTEM, 2, 202, 54, 13 + PUSHBUTTON "Device IL", IDC_DEVICE, 60, 202, 54, 13 + PUSHBUTTON "Close", IDOK, 248, 202, 54, 13 +END diff --git a/rosapps/tests/Imagelistviewer/resource.h b/rosapps/tests/Imagelistviewer/resource.h new file mode 100644 index 00000000000..6875d1deb5a --- /dev/null +++ b/rosapps/tests/Imagelistviewer/resource.h @@ -0,0 +1,4 @@ +#define IDD_IMGLST 1000 +#define IDC_LSTVIEW 1001 +#define IDC_SYSTEM 1002 +#define IDC_DEVICE 1003 diff --git a/rosapps/tests/directory.rbuild b/rosapps/tests/directory.rbuild index e2d2f1a5478..e9de78e18e3 100644 --- a/rosapps/tests/directory.rbuild +++ b/rosapps/tests/directory.rbuild @@ -112,6 +112,9 @@ + + +