diff --git a/reactos/base/applications/msconfig/msconfig.c b/reactos/base/applications/msconfig/msconfig.c index 3e4ce7c000c..ce9856c47f5 100644 --- a/reactos/base/applications/msconfig/msconfig.c +++ b/reactos/base/applications/msconfig/msconfig.c @@ -12,6 +12,8 @@ HINSTANCE hInst = 0; HWND hMainWnd; /* Main Window */ HWND hTabWnd; /* Tab Control Window */ +UINT uXIcon = 0, uYIcon = 0; /* Icon sizes */ +HICON hDialogIcon = NULL; void MsConfig_OnTabWndSelChange(void); @@ -94,7 +96,7 @@ void MsConfig_OnTabWndSelChange(void) ShowWindow(hFreeLdrPage, SW_HIDE); ShowWindow(hServicesPage, SW_HIDE); BringWindowToTop(hSystemPage); - break; + break; case 2: //Freeldr ShowWindow(hGeneralPage, SW_HIDE); ShowWindow(hSystemPage, SW_HIDE); @@ -135,30 +137,57 @@ void MsConfig_OnTabWndSelChange(void) } +static +VOID +SetDialogIcon(HWND hDlg) +{ + if (hDialogIcon) DestroyIcon(hDialogIcon); + + hDialogIcon = LoadImage(GetModuleHandle(NULL), + MAKEINTRESOURCE(IDI_APPICON), + IMAGE_ICON, + uXIcon, + uYIcon, + 0); + SendMessage(hDlg, + WM_SETICON, + ICON_SMALL, + (LPARAM)hDialogIcon); +} + + /* Message handler for dialog box. */ INT_PTR CALLBACK MsConfigWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { int idctrl; LPNMHDR pnmh; - static HICON hIcon; + UINT uXIconNew, uYIconNew; switch (message) { case WM_INITDIALOG: hMainWnd = hDlg; - hIcon = LoadImage(GetModuleHandle(NULL), - MAKEINTRESOURCE(IDI_APPICON), - IMAGE_ICON, - 16, - 16, - 0); - SendMessage(hDlg, - WM_SETICON, - ICON_SMALL, - (LPARAM)hIcon); + + uXIcon = GetSystemMetrics(SM_CXSMICON); + uYIcon = GetSystemMetrics(SM_CYSMICON); + + SetDialogIcon(hDlg); + return OnCreate(hDlg); + case WM_SETTINGCHANGE: + uXIconNew = GetSystemMetrics(SM_CXSMICON); + uYIconNew = GetSystemMetrics(SM_CYSMICON); + + if ((uXIcon != uXIconNew) || (uYIcon != uYIconNew)) + { + uXIcon = uXIconNew; + uYIcon = uYIconNew; + SetDialogIcon(hDlg); + } + break; + case WM_COMMAND: if (LOWORD(wParam) == IDOK) @@ -196,8 +225,8 @@ MsConfigWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) DestroyWindow(hFreeLdrPage); if (hSystemPage) DestroyWindow(hSystemPage); - if (hIcon) - DestroyIcon(hIcon); + if (hDialogIcon) + DestroyIcon(hDialogIcon); return DefWindowProc(hDlg, message, wParam, lParam); }