[CPL][SHELL32] Add icons to input, joy, sysdm, folder options (#1138)
[reactos.git] / dll / cpl / input / input.c
index c5c6b5f..1d566ed 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * PROJECT:         input.dll
- * FILE:            dll/win32/input/input.c
+ * FILE:            dll/cpl/input/input.c
  * PURPOSE:         input.dll
  * PROGRAMMER:      Dmitry Chapyshev (lentind@yandex.ru)
  *                  Colin Finck
 
 #define NUM_APPLETS    (1)
 
-LONG CALLBACK SystemApplet(VOID);
-HINSTANCE hApplet = 0;
-HANDLE hProcessHeap;
-HWND hCPLWindow;
+static LONG CALLBACK SystemApplet(VOID);
+
+HINSTANCE hApplet = NULL;
+static HWND hCPLWindow;
 
 /* Applets */
-APPLET Applets[NUM_APPLETS] =
+static APPLET Applets[NUM_APPLETS] =
 {
     {IDI_CPLSYSTEM, IDS_CPLSYSTEMNAME, IDS_CPLSYSTEMDESCRIPTION, SystemApplet}
 };
 
 
-VOID
-InitPropSheetPage(PROPSHEETPAGE *psp, WORD idDlg, DLGPROC DlgProc)
+static VOID
+InitPropSheetPage(PROPSHEETPAGEW *page, WORD idDlg, DLGPROC DlgProc)
 {
-    ZeroMemory(psp, sizeof(PROPSHEETPAGE));
-    psp->dwSize = sizeof(PROPSHEETPAGE);
-    psp->dwFlags = PSP_DEFAULT;
-    psp->hInstance = hApplet;
-    psp->pszTemplate = MAKEINTRESOURCE(idDlg);
-    psp->pfnDlgProc = DlgProc;
+    ZeroMemory(page, sizeof(*page));
+
+    page->dwSize      = sizeof(*page);
+    page->dwFlags     = PSP_DEFAULT;
+    page->hInstance   = hApplet;
+    page->pszTemplate = MAKEINTRESOURCEW(idDlg);
+    page->pfnDlgProc  = DlgProc;
 }
 
+static int CALLBACK
+PropSheetProc(HWND hwndDlg, UINT uMsg, LPARAM lParam)
+{
+    // NOTE: This callback is needed to set large icon correctly.
+    HICON hIcon;
+    switch (uMsg)
+    {
+        case PSCB_INITIALIZED:
+        {
+            hIcon = LoadIconW(hApplet, MAKEINTRESOURCEW(IDI_KEY_SHORT_ICO));
+            SendMessageW(hwndDlg, WM_SETICON, ICON_BIG, (LPARAM)hIcon);
+            break;
+        }
+    }
+    return 0;
+}
 
 /* First Applet */
-
-LONG CALLBACK
+static LONG CALLBACK
 SystemApplet(VOID)
 {
-    PROPSHEETPAGE psp[2];
-    PROPSHEETHEADER psh;
-    TCHAR Caption[1024];
-
-    LoadString(hApplet, IDS_CPLSYSTEMNAME, Caption, sizeof(Caption) / sizeof(TCHAR));
-
-    ZeroMemory(&psh, sizeof(PROPSHEETHEADER));
-    psh.dwSize = sizeof(PROPSHEETHEADER);
-    psh.dwFlags =  PSH_PROPSHEETPAGE;
-    psh.hwndParent = hCPLWindow;
-    psh.hInstance = hApplet;
-    psh.hIcon = LoadIcon(hApplet, MAKEINTRESOURCE(IDI_CPLSYSTEM));
-    psh.pszCaption = Caption;
-    psh.nPages = sizeof(psp) / sizeof(PROPSHEETPAGE);
-    psh.nStartPage = 0;
-    psh.ppsp = psp;
-    psh.pfnCallback = NULL;
+    PROPSHEETPAGEW page[2];
+    PROPSHEETHEADERW header;
+    WCHAR szCaption[MAX_STR_LEN];
+
+    LoadStringW(hApplet, IDS_CPLSYSTEMNAME, szCaption, ARRAYSIZE(szCaption));
+
+    ZeroMemory(&header, sizeof(header));
+
+    header.dwSize      = sizeof(header);
+    header.dwFlags     = PSH_PROPSHEETPAGE | PSH_USEICONID | PSH_USECALLBACK;
+    header.hwndParent  = hCPLWindow;
+    header.hInstance   = hApplet;
+    header.pszIcon     = MAKEINTRESOURCEW(IDI_KEY_SHORT_ICO);
+    header.pszCaption  = szCaption;
+    header.nPages      = ARRAYSIZE(page);
+    header.nStartPage  = 0;
+    header.ppsp        = page;
+    header.pfnCallback = PropSheetProc;
 
     /* Settings */
-    InitPropSheetPage(&psp[0], IDD_PROPPAGESETTINGS, (DLGPROC)SettingsPageProc);
+    InitPropSheetPage(&page[0], IDD_PROPPAGESETTINGS, SettingsPageProc);
 
     /* Advanced Settings */
-    InitPropSheetPage(&psp[1], IDD_PROPPAGEADVANCEDSETTINGS, (DLGPROC)AdvancedSettingsPageProc);
+    InitPropSheetPage(&page[1], IDD_PROPPAGEADVANCEDSETTINGS, AdvancedSettingsPageProc);
 
-    return (LONG)(PropertySheet(&psh) != -1);
+    return (LONG)(PropertySheetW(&header) != -1);
 }
 
 
@@ -79,6 +96,7 @@ CPlApplet(HWND hwndCPl, UINT uMsg, LPARAM lParam1, LPARAM lParam2)
     DWORD i;
 
     i = (DWORD)lParam1;
+
     switch (uMsg)
     {
         case CPL_INIT:
@@ -115,7 +133,6 @@ DllMain(HINSTANCE hinstDLL, DWORD dwReason, LPVOID lpvReserved)
         case DLL_PROCESS_ATTACH:
         case DLL_THREAD_ATTACH:
             hApplet = hinstDLL;
-            hProcessHeap = GetProcessHeap();
             break;
     }