[DESK] Add desktop icon change feature

- All functions now implemented, except no support for themes.
- Fixed listview height to avoid vertical scrollbar in Windows.
- Refactored existing code for show/hide desktop icons.

CORE-3567 CORE-8427
This commit is contained in:
Stanislav Motylkov 2022-10-15 20:44:03 +03:00
parent 43ecf7e4e4
commit 769fcd895b
No known key found for this signature in database
GPG key ID: AFE513258CBA9E92
32 changed files with 327 additions and 47 deletions

View file

@ -1146,19 +1146,15 @@ static VOID
OnCustomButton(HWND hwndDlg, PBACKGROUND_DATA pData)
{
HPROPSHEETPAGE hpsp[1] = {0};
PROPSHEETHEADER psh;
PROPSHEETPAGE psp;
PROPSHEETHEADER psh = {sizeof(psh)};
PROPSHEETPAGE psp = {sizeof(psp)};
ZeroMemory(&psh, sizeof(psh));
psh.dwSize = sizeof(psh);
psh.dwFlags = PSH_NOAPPLYNOW;
psh.hwndParent = GetParent(hwndDlg);
psh.hInstance = hApplet;
psh.pszCaption = MAKEINTRESOURCE(IDS_DESKTOP_ITEMS);
psh.phpage = hpsp;
ZeroMemory(&psp, sizeof(psp));
psp.dwSize = sizeof(psp);
psp.dwFlags = PSP_DEFAULT;
psp.hInstance = hApplet;
psp.pszTemplate = MAKEINTRESOURCE(IDD_DESKTOP_GENERAL);

View file

@ -81,8 +81,8 @@ ULONG __cdecl DbgPrint(PCCH Format,...);
#define MAX_DESK_PAGES 32
#define NUM_SPECTRUM_BITMAPS 3
/* This number must match DesktopIcons array size */
#define NUM_DESKTOP_ICONS 4
#define NUM_DESKTOP_ICONS 4 /* DesktopIcons array size */
#define NUM_CHANGE_ICONS 5 /* IconChange array size */
typedef struct
{
@ -90,15 +90,33 @@ typedef struct
BOOL bHideNewStart; /* Hide icon in Modern Start menu mode */
} HIDE_ICON;
typedef struct _ICON_PATH
{
TCHAR szPath[MAX_PATH];
} ICON_PATH;
typedef struct _ICON_DATA
{
TCHAR szPath[MAX_PATH];
TCHAR szTitle[40];
} ICON_DATA;
typedef struct _DESKTOP_DATA
{
BOOL bSettingsChanged;
HIDE_ICON optIcons[NUM_DESKTOP_ICONS];
BOOL bHideChanged[NUM_DESKTOP_ICONS];
BOOL bIconChanged[NUM_CHANGE_ICONS];
ICON_PATH Icon[NUM_CHANGE_ICONS];
ICON_PATH DefIcon[NUM_CHANGE_ICONS];
BOOL bLocalSettingsChanged;
BOOL bLocalHideIcon[NUM_DESKTOP_ICONS];
BOOL bLocalHideChanged[NUM_DESKTOP_ICONS];
BOOL bLocalIconChanged[NUM_CHANGE_ICONS];
ICON_DATA LocalIcon[NUM_CHANGE_ICONS];
HIMAGELIST hLocalImageList;
INT iLocalCurIcon;
} DESKTOP_DATA, *PDESKTOP_DATA;
/* As slider control can't contain user data, we have to keep an

View file

@ -7,7 +7,24 @@
#include "desk.h"
#define FCIDM_DESKBROWSER_REFRESH 0xA220 /* From shresdef.h */
#include <shlwapi.h>
#include <shellapi.h>
/* From shresdef.h */
#define FCIDM_DESKBROWSER_REFRESH 0xA220
#define IDS_TITLE_MYCOMP 30386
#define IDS_TITLE_MYNET 30387
#define IDS_TITLE_BIN_1 30388
#define IDS_TITLE_BIN_0 30389
/* Workaround:
* There's no special fallback icon title string
* for My Documents in shell32.dll, so use IDS_PERSONAL.
*
* Windows does this in some different way.
*/
#define IDS_PERSONAL 9227
static const TCHAR szHideDesktopIcons[] = TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\HideDesktopIcons");
static const TCHAR szClassicStartMenu[] = TEXT("ClassicStartMenu");
@ -24,11 +41,30 @@ struct
{TEXT("{871C5380-42A0-1069-A2EA-08002B30309D}"), IDC_ICONS_INTERNET}, /* Internet Browser */
};
static const TCHAR szUserClass[] = TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\CLSID\\");
static const TCHAR szSysClass[] = TEXT("CLSID\\");
static const TCHAR szDefaultIcon[] = TEXT("\\DefaultIcon");
static const TCHAR szFallbackIcon[] = TEXT("%SystemRoot%\\system32\\shell32.dll,0");
struct
{
LPCTSTR CLSID;
UINT TitleId;
LPCTSTR IconName;
} IconChange[NUM_CHANGE_ICONS] = {
{TEXT("{20D04FE0-3AEA-1069-A2D8-08002B30309D}"), IDS_TITLE_MYCOMP, NULL}, /* My Computer */
{TEXT("{450D8FBA-AD25-11D0-98A8-0800361B1103}"), IDS_PERSONAL, NULL}, /* My Documents */
{TEXT("{208D2C60-3AEA-1069-A2D7-08002B30309D}"), IDS_TITLE_MYNET, NULL}, /* My Network Places */
{TEXT("{645FF040-5081-101B-9F08-00AA002F954E}"), IDS_TITLE_BIN_1, TEXT("Full")}, /* Recycle Bin (full) */
{TEXT("{645FF040-5081-101B-9F08-00AA002F954E}"), IDS_TITLE_BIN_0, TEXT("Empty")}, /* Recycle Bin (empty) */
};
VOID
InitDesktopSettings(PDESKTOP_DATA pData)
{
HKEY regKey, iconKey1, iconKey2;
UINT i;
DWORD dwType, cbData;
/* Default values */
for (i = 0; i < _countof(pData->optIcons); i++)
@ -41,7 +77,7 @@ InitDesktopSettings(PDESKTOP_DATA pData)
if (RegOpenKeyEx(HKEY_CURRENT_USER, szHideDesktopIcons,
0, KEY_QUERY_VALUE, &regKey) != ERROR_SUCCESS)
{
return;
goto LoadIcons;
}
if (RegOpenKeyEx(regKey, szClassicStartMenu, 0, KEY_QUERY_VALUE, &iconKey1) != ERROR_SUCCESS)
@ -53,7 +89,7 @@ InitDesktopSettings(PDESKTOP_DATA pData)
for (i = 0; i < _countof(pData->optIcons); i++)
{
LSTATUS res;
DWORD dwType, dwData, cbData;
DWORD dwData;
if (iconKey1)
{
@ -81,6 +117,47 @@ InitDesktopSettings(PDESKTOP_DATA pData)
RegCloseKey(iconKey2);
RegCloseKey(regKey);
LoadIcons:
for (i = 0; i < _countof(IconChange); i++)
{
TCHAR iconPath[MAX_PATH];
TCHAR szData[MAX_PATH];
/* Current icons */
StringCchCopy(iconPath, _countof(iconPath), szUserClass);
StringCchCat(iconPath, _countof(iconPath), IconChange[i].CLSID);
StringCchCat(iconPath, _countof(iconPath), szDefaultIcon);
cbData = sizeof(szData);
if (SHGetValue(HKEY_CURRENT_USER, iconPath, IconChange[i].IconName, &dwType,
&szData, &cbData) == ERROR_SUCCESS &&
(dwType == REG_SZ || dwType == REG_EXPAND_SZ))
{
StringCchCopy(pData->Icon[i].szPath, _countof(pData->Icon[i].szPath), szData);
}
/* Default icons */
/* FIXME: Get default icons from theme data, fallback to CLSID data on error. */
StringCchCopy(iconPath, _countof(iconPath), szSysClass);
StringCchCat(iconPath, _countof(iconPath), IconChange[i].CLSID);
StringCchCat(iconPath, _countof(iconPath), szDefaultIcon);
cbData = sizeof(szData);
if (SHGetValue(HKEY_CLASSES_ROOT, iconPath, IconChange[i].IconName, &dwType,
&szData, &cbData) == ERROR_SUCCESS &&
(dwType == REG_SZ || dwType == REG_EXPAND_SZ))
{
StringCchCopy(pData->DefIcon[i].szPath, _countof(pData->DefIcon[i].szPath), szData);
}
/* Emergency fallback */
if (lstrlen(pData->DefIcon[i].szPath) == 0)
StringCchCopy(pData->DefIcon[i].szPath, _countof(pData->DefIcon[i].szPath), szFallbackIcon);
if (lstrlen(pData->Icon[i].szPath) == 0)
StringCchCopy(pData->Icon[i].szPath, _countof(pData->Icon[i].szPath), pData->DefIcon[i].szPath);
}
}
BOOL
@ -93,13 +170,21 @@ SaveDesktopSettings(PDESKTOP_DATA pData)
for (i = 0; i < _countof(DesktopIcons); i++)
{
if (pData->bLocalHideChanged[i])
pData->bHideChanged[i] = TRUE;
else
if (!pData->bLocalHideChanged[i])
continue;
pData->optIcons[i].bHideClassic =
pData->optIcons[i].bHideNewStart = pData->bLocalHideIcon[i];
pData->bHideChanged[i] = TRUE;
}
for (i = 0; i < _countof(IconChange); i++)
{
if (!pData->bLocalIconChanged[i])
continue;
StringCchCopy(pData->Icon[i].szPath, _countof(pData->Icon[i].szPath), pData->LocalIcon[i].szPath);
pData->bIconChanged[i] = TRUE;
}
pData->bSettingsChanged = TRUE;
@ -187,24 +272,55 @@ SetDesktopSettings(PDESKTOP_DATA pData)
pData->bHideChanged[i] = FALSE;
}
for (i = 0; i < _countof(IconChange); i++)
{
TCHAR iconPath[MAX_PATH];
DWORD dwType = (pData->Icon[i].szPath[0] == TEXT('%') ? REG_EXPAND_SZ : REG_SZ);
if (!pData->bIconChanged[i])
continue;
StringCchCopy(iconPath, _countof(iconPath), szUserClass);
StringCchCat(iconPath, _countof(iconPath), IconChange[i].CLSID);
StringCchCat(iconPath, _countof(iconPath), szDefaultIcon);
SHSetValue(HKEY_CURRENT_USER, iconPath, IconChange[i].IconName, dwType,
pData->Icon[i].szPath, sizeof(pData->Icon[i].szPath));
if (IconChange[i].TitleId == IDS_TITLE_BIN_0)
{
/* Also apply to the root value */
SHSetValue(HKEY_CURRENT_USER, iconPath, NULL, dwType,
pData->Icon[i].szPath, sizeof(pData->Icon[i].szPath));
}
pData->bIconChanged[i] = FALSE;
}
pData->bSettingsChanged = FALSE;
/* Refresh the desktop */
PostMessage(GetShellWindow(), WM_COMMAND, FCIDM_DESKBROWSER_REFRESH, 0);
}
static HICON
GetIconFromLocation(LPTSTR szIconPath)
{
INT iIndex;
TCHAR szPath[MAX_PATH];
ExpandEnvironmentStrings(szIconPath, szPath, _countof(szPath));
iIndex = PathParseIconLocation(szPath);
return ExtractIcon(hApplet, szPath, iIndex);
}
static VOID
DesktopOnInitDialog(IN HWND hwndDlg, IN PDESKTOP_DATA pData)
{
UINT i;
SHELLSTATE ss = {0};
HWND hwndList;
SHGetSetSettings(&ss, SSF_STARTPANELON, FALSE);
/* Disable unimplemented features */
EnableWindow(GetDlgItem(hwndDlg, IDC_ICONS_CHANGEICON), FALSE);
EnableWindow(GetDlgItem(hwndDlg, IDC_ICONS_SETDEFAULT), FALSE);
for (i = 0; i < _countof(pData->optIcons); i++)
{
BOOL bHide;
@ -222,9 +338,86 @@ DesktopOnInitDialog(IN HWND hwndDlg, IN PDESKTOP_DATA pData)
pData->bLocalHideChanged[i] = FALSE;
}
pData->iLocalCurIcon = 0;
hwndList = GetDlgItem(hwndDlg, IDC_ICONS_LISTVIEW);
pData->hLocalImageList = ImageList_Create(GetSystemMetrics(SM_CXICON), GetSystemMetrics(SM_CYICON), ILC_COLOR32 | ILC_MASK, 1, 1);
ListView_SetImageList(hwndList, pData->hLocalImageList, LVSIL_NORMAL);
for (i = 0; i < _countof(IconChange); i++)
{
TCHAR szClassPath[MAX_PATH];
DWORD dwType, cbData;
LVITEM lvitem = {0};
HICON hIcon;
StringCchCopy(pData->LocalIcon[i].szPath, _countof(pData->LocalIcon[i].szPath), pData->Icon[i].szPath);
pData->bLocalIconChanged[i] = FALSE;
/* Try loading user-defined desktop icon title */
StringCchCopy(szClassPath, _countof(szClassPath), szUserClass);
StringCchCat(szClassPath, _countof(szClassPath), IconChange[i].CLSID);
cbData = sizeof(pData->LocalIcon[i].szTitle);
if (SHGetValue(HKEY_CURRENT_USER, szClassPath, IconChange[i].IconName, &dwType,
pData->LocalIcon[i].szTitle, &cbData) != ERROR_SUCCESS || dwType != REG_SZ)
{
/* Try loading system-defined class icon title */
StringCchCopy(szClassPath, _countof(szClassPath), szSysClass);
StringCchCat(szClassPath, _countof(szClassPath), IconChange[i].CLSID);
cbData = sizeof(pData->LocalIcon[i].szTitle);
if (SHGetValue(HKEY_CLASSES_ROOT, szClassPath, IconChange[i].IconName, &dwType,
pData->LocalIcon[i].szTitle, &cbData) != ERROR_SUCCESS || dwType != REG_SZ)
{
/* Fallback to predefined strings */
LoadString(GetModuleHandle(TEXT("shell32.dll")),
IconChange[i].TitleId,
pData->LocalIcon[i].szTitle,
_countof(pData->LocalIcon[i].szTitle));
}
}
hIcon = GetIconFromLocation(pData->LocalIcon[i].szPath);
lvitem.mask = LVIF_TEXT | LVIF_IMAGE | LVIF_PARAM;
lvitem.iItem = i;
lvitem.iSubItem = 0;
lvitem.pszText = pData->LocalIcon[i].szTitle;
lvitem.lParam = (LPARAM)i;
if (hIcon)
{
if (pData->hLocalImageList)
lvitem.iImage = ImageList_AddIcon(pData->hLocalImageList, hIcon);
DestroyIcon(hIcon);
}
if (ListView_InsertItem(hwndList, &lvitem) < 0)
continue;
if (i > 0)
continue;
lvitem.state = LVIS_FOCUSED | LVIS_SELECTED;
lvitem.stateMask = LVIS_FOCUSED | LVIS_SELECTED;
SendMessage(hwndList, LVM_SETITEMSTATE, 0, (LPARAM)&lvitem);
}
pData->bLocalSettingsChanged = FALSE;
}
static VOID
DesktopOnDestroyDialog(IN HWND hwndDlg, IN PDESKTOP_DATA pData)
{
if (pData->hLocalImageList)
{
ListView_SetImageList(GetDlgItem(hwndDlg, IDC_ICONS_LISTVIEW), NULL, LVSIL_NORMAL);
ImageList_Destroy(pData->hLocalImageList);
}
SetWindowLongPtr(hwndDlg, DWLP_USER, 0);
}
/* Property page dialog callback */
INT_PTR CALLBACK
DesktopPageProc(IN HWND hwndDlg, IN UINT uMsg, IN WPARAM wParam, IN LPARAM lParam)
@ -245,6 +438,12 @@ DesktopPageProc(IN HWND hwndDlg, IN UINT uMsg, IN WPARAM wParam, IN LPARAM lPara
break;
}
case WM_DESTROY:
{
DesktopOnDestroyDialog(hwndDlg, pData);
break;
}
case WM_COMMAND:
{
DWORD controlId = LOWORD(wParam);
@ -253,6 +452,7 @@ DesktopPageProc(IN HWND hwndDlg, IN UINT uMsg, IN WPARAM wParam, IN LPARAM lPara
if (command == BN_CLICKED)
{
UINT i;
BOOL bUpdateIcon = FALSE;
for (i = 0; i < _countof(DesktopIcons); i++)
{
@ -268,6 +468,72 @@ DesktopPageProc(IN HWND hwndDlg, IN UINT uMsg, IN WPARAM wParam, IN LPARAM lPara
break;
}
}
if (controlId == IDC_ICONS_CHANGEICON)
{
TCHAR szPath[MAX_PATH];
INT iIndex;
i = pData->iLocalCurIcon;
ExpandEnvironmentStrings(pData->LocalIcon[i].szPath, szPath, _countof(szPath));
iIndex = PathParseIconLocation(szPath);
if (PickIconDlg(hwndDlg, szPath, _countof(szPath), &iIndex))
{
StringCchCopy(pData->LocalIcon[i].szPath, _countof(pData->LocalIcon[i].szPath), szPath);
PathUnExpandEnvStrings(pData->LocalIcon[i].szPath, szPath, _countof(szPath));
StringCchPrintf(pData->LocalIcon[i].szPath, _countof(pData->LocalIcon[i].szPath), TEXT("%s,%d"), szPath, iIndex);
bUpdateIcon = TRUE;
}
}
else if (controlId == IDC_ICONS_SETDEFAULT)
{
i = pData->iLocalCurIcon;
StringCchCopy(pData->LocalIcon[i].szPath, _countof(pData->LocalIcon[i].szPath), pData->DefIcon[i].szPath);
bUpdateIcon = TRUE;
}
if (bUpdateIcon)
{
HWND hwndList = GetDlgItem(hwndDlg, IDC_ICONS_LISTVIEW);
HICON hIcon;
hIcon = GetIconFromLocation(pData->LocalIcon[i].szPath);
if (hIcon)
{
if (pData->hLocalImageList)
ImageList_ReplaceIcon(pData->hLocalImageList, i, hIcon);
DestroyIcon(hIcon);
}
pData->bLocalSettingsChanged =
pData->bLocalIconChanged[i] = TRUE;
InvalidateRect(hwndList, NULL, TRUE);
SetFocus(hwndList);
PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
}
}
break;
}
case WM_NOTIFY:
{
LPNMLISTVIEW nm = (LPNMLISTVIEW)lParam;
switch (nm->hdr.code)
{
case LVN_ITEMCHANGED:
{
if ((nm->uNewState & LVIS_SELECTED) == 0)
return FALSE;
pData->iLocalCurIcon = nm->iItem;
break;
}
}
break;
}

View file

@ -168,7 +168,7 @@ BEGIN
BS_AUTOCHECKBOX | WS_TABSTOP, 116, 28, 100, 12
CONTROL "", IDC_ICONS_LISTVIEW, "SysListView32",
LVS_ICON | LVS_ALIGNLEFT | LVS_AUTOARRANGE | LVS_SINGLESEL | WS_BORDER | WS_TABSTOP | WS_HSCROLL,
6, 60, 212, 54
6, 60, 212, 56
PUSHBUTTON "C&hange Icon...", IDC_ICONS_CHANGEICON, 86, 120, 64, 15
PUSHBUTTON "Re&store Default", IDC_ICONS_SETDEFAULT, 154, 120, 64, 15
END

View file

@ -174,7 +174,7 @@ BEGIN
BS_AUTOCHECKBOX | WS_TABSTOP, 116, 28, 100, 12
CONTROL "", IDC_ICONS_LISTVIEW, "SysListView32",
LVS_ICON | LVS_ALIGNLEFT | LVS_AUTOARRANGE | LVS_SINGLESEL | WS_BORDER | WS_TABSTOP | WS_HSCROLL,
6, 60, 212, 54
6, 60, 212, 56
PUSHBUTTON "C&hange Icon...", IDC_ICONS_CHANGEICON, 86, 120, 64, 15
PUSHBUTTON "Re&store Default", IDC_ICONS_SETDEFAULT, 154, 120, 64, 15
END

View file

@ -168,7 +168,7 @@ BEGIN
BS_AUTOCHECKBOX | WS_TABSTOP, 116, 28, 100, 12
CONTROL "", IDC_ICONS_LISTVIEW, "SysListView32",
LVS_ICON | LVS_ALIGNLEFT | LVS_AUTOARRANGE | LVS_SINGLESEL | WS_BORDER | WS_TABSTOP | WS_HSCROLL,
6, 60, 212, 54
6, 60, 212, 56
PUSHBUTTON "C&hange Icon...", IDC_ICONS_CHANGEICON, 86, 120, 64, 15
PUSHBUTTON "Re&store Default", IDC_ICONS_SETDEFAULT, 154, 120, 64, 15
END

View file

@ -168,7 +168,7 @@ BEGIN
BS_AUTOCHECKBOX | WS_TABSTOP, 116, 28, 100, 12
CONTROL "", IDC_ICONS_LISTVIEW, "SysListView32",
LVS_ICON | LVS_ALIGNLEFT | LVS_AUTOARRANGE | LVS_SINGLESEL | WS_BORDER | WS_TABSTOP | WS_HSCROLL,
6, 60, 212, 54
6, 60, 212, 56
PUSHBUTTON "C&hange Icon...", IDC_ICONS_CHANGEICON, 86, 120, 64, 15
PUSHBUTTON "Re&store Default", IDC_ICONS_SETDEFAULT, 154, 120, 64, 15
END

View file

@ -168,7 +168,7 @@ BEGIN
BS_AUTOCHECKBOX | WS_TABSTOP, 116, 28, 100, 12
CONTROL "", IDC_ICONS_LISTVIEW, "SysListView32",
LVS_ICON | LVS_ALIGNLEFT | LVS_AUTOARRANGE | LVS_SINGLESEL | WS_BORDER | WS_TABSTOP | WS_HSCROLL,
6, 60, 212, 54
6, 60, 212, 56
PUSHBUTTON "C&hange Icon...", IDC_ICONS_CHANGEICON, 86, 120, 64, 15
PUSHBUTTON "Re&store Default", IDC_ICONS_SETDEFAULT, 154, 120, 64, 15
END

View file

@ -168,7 +168,7 @@ BEGIN
BS_AUTOCHECKBOX | WS_TABSTOP, 116, 28, 100, 12
CONTROL "", IDC_ICONS_LISTVIEW, "SysListView32",
LVS_ICON | LVS_ALIGNLEFT | LVS_AUTOARRANGE | LVS_SINGLESEL | WS_BORDER | WS_TABSTOP | WS_HSCROLL,
6, 60, 212, 54
6, 60, 212, 56
PUSHBUTTON "C&hange Icon...", IDC_ICONS_CHANGEICON, 86, 120, 64, 15
PUSHBUTTON "Re&store Default", IDC_ICONS_SETDEFAULT, 154, 120, 64, 15
END

View file

@ -178,7 +178,7 @@ BEGIN
BS_AUTOCHECKBOX | WS_TABSTOP, 116, 28, 100, 12
CONTROL "", IDC_ICONS_LISTVIEW, "SysListView32",
LVS_ICON | LVS_ALIGNLEFT | LVS_AUTOARRANGE | LVS_SINGLESEL | WS_BORDER | WS_TABSTOP | WS_HSCROLL,
6, 60, 212, 54
6, 60, 212, 56
PUSHBUTTON "C&hange Icon...", IDC_ICONS_CHANGEICON, 86, 120, 64, 15
PUSHBUTTON "Re&store Default", IDC_ICONS_SETDEFAULT, 154, 120, 64, 15
END

View file

@ -175,7 +175,7 @@ BEGIN
BS_AUTOCHECKBOX | WS_TABSTOP, 116, 28, 100, 12
CONTROL "", IDC_ICONS_LISTVIEW, "SysListView32",
LVS_ICON | LVS_ALIGNLEFT | LVS_AUTOARRANGE | LVS_SINGLESEL | WS_BORDER | WS_TABSTOP | WS_HSCROLL,
6, 60, 212, 54
6, 60, 212, 56
PUSHBUTTON "C&hange Icon...", IDC_ICONS_CHANGEICON, 86, 120, 64, 15
PUSHBUTTON "Re&store Default", IDC_ICONS_SETDEFAULT, 154, 120, 64, 15
END

View file

@ -170,7 +170,7 @@ BEGIN
BS_AUTOCHECKBOX | WS_TABSTOP, 116, 28, 100, 12
CONTROL "", IDC_ICONS_LISTVIEW, "SysListView32",
LVS_ICON | LVS_ALIGNLEFT | LVS_AUTOARRANGE | LVS_SINGLESEL | WS_BORDER | WS_TABSTOP | WS_HSCROLL,
6, 60, 212, 54
6, 60, 212, 56
PUSHBUTTON "C&hange Icon...", IDC_ICONS_CHANGEICON, 86, 120, 64, 15
PUSHBUTTON "Re&store Default", IDC_ICONS_SETDEFAULT, 154, 120, 64, 15
END

View file

@ -168,7 +168,7 @@ BEGIN
BS_AUTOCHECKBOX | WS_TABSTOP, 116, 28, 100, 12
CONTROL "", IDC_ICONS_LISTVIEW, "SysListView32",
LVS_ICON | LVS_ALIGNLEFT | LVS_AUTOARRANGE | LVS_SINGLESEL | WS_BORDER | WS_TABSTOP | WS_HSCROLL,
6, 60, 212, 54
6, 60, 212, 56
PUSHBUTTON "C&hange Icon...", IDC_ICONS_CHANGEICON, 86, 120, 64, 15
PUSHBUTTON "Re&store Default", IDC_ICONS_SETDEFAULT, 154, 120, 64, 15
END

View file

@ -170,7 +170,7 @@ BEGIN
BS_AUTOCHECKBOX | WS_TABSTOP, 116, 28, 100, 12
CONTROL "", IDC_ICONS_LISTVIEW, "SysListView32",
LVS_ICON | LVS_ALIGNLEFT | LVS_AUTOARRANGE | LVS_SINGLESEL | WS_BORDER | WS_TABSTOP | WS_HSCROLL,
6, 60, 212, 54
6, 60, 212, 56
PUSHBUTTON "C&hange Icon...", IDC_ICONS_CHANGEICON, 86, 120, 64, 15
PUSHBUTTON "Re&store Default", IDC_ICONS_SETDEFAULT, 154, 120, 64, 15
END

View file

@ -168,7 +168,7 @@ BEGIN
BS_AUTOCHECKBOX | WS_TABSTOP, 116, 28, 100, 12
CONTROL "", IDC_ICONS_LISTVIEW, "SysListView32",
LVS_ICON | LVS_ALIGNLEFT | LVS_AUTOARRANGE | LVS_SINGLESEL | WS_BORDER | WS_TABSTOP | WS_HSCROLL,
6, 60, 212, 54
6, 60, 212, 56
PUSHBUTTON "C&hange Icon...", IDC_ICONS_CHANGEICON, 86, 120, 64, 15
PUSHBUTTON "Re&store Default", IDC_ICONS_SETDEFAULT, 154, 120, 64, 15
END

View file

@ -168,7 +168,7 @@ BEGIN
BS_AUTOCHECKBOX | WS_TABSTOP, 116, 28, 100, 12
CONTROL "", IDC_ICONS_LISTVIEW, "SysListView32",
LVS_ICON | LVS_ALIGNLEFT | LVS_AUTOARRANGE | LVS_SINGLESEL | WS_BORDER | WS_TABSTOP | WS_HSCROLL,
6, 60, 212, 54
6, 60, 212, 56
PUSHBUTTON "C&hange Icon...", IDC_ICONS_CHANGEICON, 86, 120, 64, 15
PUSHBUTTON "Re&store Default", IDC_ICONS_SETDEFAULT, 154, 120, 64, 15
END

View file

@ -168,7 +168,7 @@ BEGIN
BS_AUTOCHECKBOX | WS_TABSTOP, 116, 28, 100, 12
CONTROL "", IDC_ICONS_LISTVIEW, "SysListView32",
LVS_ICON | LVS_ALIGNLEFT | LVS_AUTOARRANGE | LVS_SINGLESEL | WS_BORDER | WS_TABSTOP | WS_HSCROLL,
6, 60, 212, 54
6, 60, 212, 56
PUSHBUTTON "C&hange Icon...", IDC_ICONS_CHANGEICON, 86, 120, 64, 15
PUSHBUTTON "Re&store Default", IDC_ICONS_SETDEFAULT, 154, 120, 64, 15
END

View file

@ -168,7 +168,7 @@ BEGIN
BS_AUTOCHECKBOX | WS_TABSTOP, 116, 28, 100, 12
CONTROL "", IDC_ICONS_LISTVIEW, "SysListView32",
LVS_ICON | LVS_ALIGNLEFT | LVS_AUTOARRANGE | LVS_SINGLESEL | WS_BORDER | WS_TABSTOP | WS_HSCROLL,
6, 60, 212, 54
6, 60, 212, 56
PUSHBUTTON "C&hange Icon...", IDC_ICONS_CHANGEICON, 86, 120, 64, 15
PUSHBUTTON "Re&store Default", IDC_ICONS_SETDEFAULT, 154, 120, 64, 15
END

View file

@ -168,7 +168,7 @@ BEGIN
BS_AUTOCHECKBOX | WS_TABSTOP, 116, 28, 100, 12
CONTROL "", IDC_ICONS_LISTVIEW, "SysListView32",
LVS_ICON | LVS_ALIGNLEFT | LVS_AUTOARRANGE | LVS_SINGLESEL | WS_BORDER | WS_TABSTOP | WS_HSCROLL,
6, 60, 212, 54
6, 60, 212, 56
PUSHBUTTON "C&hange Icon...", IDC_ICONS_CHANGEICON, 86, 120, 64, 15
PUSHBUTTON "Re&store Default", IDC_ICONS_SETDEFAULT, 154, 120, 64, 15
END

View file

@ -178,7 +178,7 @@ BEGIN
BS_AUTOCHECKBOX | WS_TABSTOP, 116, 28, 100, 12
CONTROL "", IDC_ICONS_LISTVIEW, "SysListView32",
LVS_ICON | LVS_ALIGNLEFT | LVS_AUTOARRANGE | LVS_SINGLESEL | WS_BORDER | WS_TABSTOP | WS_HSCROLL,
6, 60, 212, 54
6, 60, 212, 56
PUSHBUTTON "C&hange Icon...", IDC_ICONS_CHANGEICON, 86, 120, 64, 15
PUSHBUTTON "Re&store Default", IDC_ICONS_SETDEFAULT, 154, 120, 64, 15
END

View file

@ -168,7 +168,7 @@ BEGIN
BS_AUTOCHECKBOX | WS_TABSTOP, 116, 28, 100, 12
CONTROL "", IDC_ICONS_LISTVIEW, "SysListView32",
LVS_ICON | LVS_ALIGNLEFT | LVS_AUTOARRANGE | LVS_SINGLESEL | WS_BORDER | WS_TABSTOP | WS_HSCROLL,
6, 60, 212, 54
6, 60, 212, 56
PUSHBUTTON "C&hange Icon...", IDC_ICONS_CHANGEICON, 86, 120, 64, 15
PUSHBUTTON "Re&store Default", IDC_ICONS_SETDEFAULT, 154, 120, 64, 15
END

View file

@ -173,7 +173,7 @@ BEGIN
BS_AUTOCHECKBOX | WS_TABSTOP, 116, 28, 100, 12
CONTROL "", IDC_ICONS_LISTVIEW, "SysListView32",
LVS_ICON | LVS_ALIGNLEFT | LVS_AUTOARRANGE | LVS_SINGLESEL | WS_BORDER | WS_TABSTOP | WS_HSCROLL,
6, 60, 212, 54
6, 60, 212, 56
PUSHBUTTON "C&hange Icon...", IDC_ICONS_CHANGEICON, 86, 120, 64, 15
PUSHBUTTON "Re&store Default", IDC_ICONS_SETDEFAULT, 154, 120, 64, 15
END

View file

@ -177,7 +177,7 @@ BEGIN
BS_AUTOCHECKBOX | WS_TABSTOP, 116, 28, 100, 12
CONTROL "", IDC_ICONS_LISTVIEW, "SysListView32",
LVS_ICON | LVS_ALIGNLEFT | LVS_AUTOARRANGE | LVS_SINGLESEL | WS_BORDER | WS_TABSTOP | WS_HSCROLL,
6, 60, 212, 54
6, 60, 212, 56
PUSHBUTTON "C&hange Icon...", IDC_ICONS_CHANGEICON, 86, 120, 64, 15
PUSHBUTTON "Re&store Default", IDC_ICONS_SETDEFAULT, 154, 120, 64, 15
END

View file

@ -168,7 +168,7 @@ BEGIN
BS_AUTOCHECKBOX | WS_TABSTOP, 116, 28, 100, 12
CONTROL "", IDC_ICONS_LISTVIEW, "SysListView32",
LVS_ICON | LVS_ALIGNLEFT | LVS_AUTOARRANGE | LVS_SINGLESEL | WS_BORDER | WS_TABSTOP | WS_HSCROLL,
6, 60, 212, 54
6, 60, 212, 56
PUSHBUTTON "С&менить значок...", IDC_ICONS_CHANGEICON, 74, 120, 70, 15
PUSHBUTTON "&Обычный значок", IDC_ICONS_SETDEFAULT, 148, 120, 70, 15
END

View file

@ -170,7 +170,7 @@ BEGIN
BS_AUTOCHECKBOX | WS_TABSTOP, 116, 28, 100, 12
CONTROL "", IDC_ICONS_LISTVIEW, "SysListView32",
LVS_ICON | LVS_ALIGNLEFT | LVS_AUTOARRANGE | LVS_SINGLESEL | WS_BORDER | WS_TABSTOP | WS_HSCROLL,
6, 60, 212, 54
6, 60, 212, 56
PUSHBUTTON "C&hange Icon...", IDC_ICONS_CHANGEICON, 86, 120, 64, 15
PUSHBUTTON "Re&store Default", IDC_ICONS_SETDEFAULT, 154, 120, 64, 15
END

View file

@ -172,7 +172,7 @@ BEGIN
BS_AUTOCHECKBOX | WS_TABSTOP, 116, 28, 100, 12
CONTROL "", IDC_ICONS_LISTVIEW, "SysListView32",
LVS_ICON | LVS_ALIGNLEFT | LVS_AUTOARRANGE | LVS_SINGLESEL | WS_BORDER | WS_TABSTOP | WS_HSCROLL,
6, 60, 212, 54
6, 60, 212, 56
PUSHBUTTON "C&hange Icon...", IDC_ICONS_CHANGEICON, 86, 120, 64, 15
PUSHBUTTON "Re&store Default", IDC_ICONS_SETDEFAULT, 154, 120, 64, 15
END

View file

@ -170,7 +170,7 @@ BEGIN
BS_AUTOCHECKBOX | WS_TABSTOP, 116, 28, 100, 12
CONTROL "", IDC_ICONS_LISTVIEW, "SysListView32",
LVS_ICON | LVS_ALIGNLEFT | LVS_AUTOARRANGE | LVS_SINGLESEL | WS_BORDER | WS_TABSTOP | WS_HSCROLL,
6, 60, 212, 54
6, 60, 212, 56
PUSHBUTTON "C&hange Icon...", IDC_ICONS_CHANGEICON, 86, 120, 64, 15
PUSHBUTTON "Re&store Default", IDC_ICONS_SETDEFAULT, 154, 120, 64, 15
END

View file

@ -170,7 +170,7 @@ BEGIN
BS_AUTOCHECKBOX | WS_TABSTOP, 116, 28, 100, 12
CONTROL "", IDC_ICONS_LISTVIEW, "SysListView32",
LVS_ICON | LVS_ALIGNLEFT | LVS_AUTOARRANGE | LVS_SINGLESEL | WS_BORDER | WS_TABSTOP | WS_HSCROLL,
6, 60, 212, 54
6, 60, 212, 56
PUSHBUTTON "C&hange Icon...", IDC_ICONS_CHANGEICON, 86, 120, 64, 15
PUSHBUTTON "Re&store Default", IDC_ICONS_SETDEFAULT, 154, 120, 64, 15
END

View file

@ -176,7 +176,7 @@ BEGIN
BS_AUTOCHECKBOX | WS_TABSTOP, 116, 28, 100, 12
CONTROL "", IDC_ICONS_LISTVIEW, "SysListView32",
LVS_ICON | LVS_ALIGNLEFT | LVS_AUTOARRANGE | LVS_SINGLESEL | WS_BORDER | WS_TABSTOP | WS_HSCROLL,
6, 60, 212, 54
6, 60, 212, 56
PUSHBUTTON "C&hange Icon...", IDC_ICONS_CHANGEICON, 86, 120, 64, 15
PUSHBUTTON "Re&store Default", IDC_ICONS_SETDEFAULT, 154, 120, 64, 15
END

View file

@ -178,7 +178,7 @@ BEGIN
BS_AUTOCHECKBOX | WS_TABSTOP, 116, 28, 100, 12
CONTROL "", IDC_ICONS_LISTVIEW, "SysListView32",
LVS_ICON | LVS_ALIGNLEFT | LVS_AUTOARRANGE | LVS_SINGLESEL | WS_BORDER | WS_TABSTOP | WS_HSCROLL,
6, 60, 212, 54
6, 60, 212, 56
PUSHBUTTON "C&hange Icon...", IDC_ICONS_CHANGEICON, 86, 120, 64, 15
PUSHBUTTON "Re&store Default", IDC_ICONS_SETDEFAULT, 154, 120, 64, 15
END

View file

@ -176,7 +176,7 @@ BEGIN
BS_AUTOCHECKBOX | WS_TABSTOP, 116, 28, 100, 12
CONTROL "", IDC_ICONS_LISTVIEW, "SysListView32",
LVS_ICON | LVS_ALIGNLEFT | LVS_AUTOARRANGE | LVS_SINGLESEL | WS_BORDER | WS_TABSTOP | WS_HSCROLL,
6, 60, 212, 54
6, 60, 212, 56
PUSHBUTTON "C&hange Icon...", IDC_ICONS_CHANGEICON, 86, 120, 64, 15
PUSHBUTTON "Re&store Default", IDC_ICONS_SETDEFAULT, 154, 120, 64, 15
END

View file

@ -177,7 +177,7 @@ BEGIN
BS_AUTOCHECKBOX | WS_TABSTOP, 116, 28, 100, 12
CONTROL "", IDC_ICONS_LISTVIEW, "SysListView32",
LVS_ICON | LVS_ALIGNLEFT | LVS_AUTOARRANGE | LVS_SINGLESEL | WS_BORDER | WS_TABSTOP | WS_HSCROLL,
6, 60, 212, 54
6, 60, 212, 56
PUSHBUTTON "C&hange Icon...", IDC_ICONS_CHANGEICON, 86, 120, 64, 15
PUSHBUTTON "Re&store Default", IDC_ICONS_SETDEFAULT, 154, 120, 64, 15
END