https://git.reactos.org/?p=reactos.git;a=commitdiff;h=02936d4c671105fe041e1459a08c627c4d0cc2cb

commit 02936d4c671105fe041e1459a08c627c4d0cc2cb
Author:     Katayama Hirofumi MZ <[email protected]>
AuthorDate: Wed Dec 19 20:07:17 2018 +0900
Commit:     GitHub <[email protected]>
CommitDate: Wed Dec 19 20:07:17 2018 +0900

    [DEVMGR][NETCFGX][MSCONFIG][NETSHELL] Fix and improve icons (#1143)
    
    CORE-15445
---
 base/applications/msconfig/msconfig.c        |  34 +++++++++-----
 dll/shellext/netshell/lanstatusui.cpp        |  23 ++++++++-
 dll/shellext/netshell/shfldr_netconnect.cpp  |  23 ++++++++-
 dll/win32/devmgr/devmgmt/MainWindow.cpp      |   6 +--
 dll/win32/netcfgx/inetcfgcomp_iface.c        |  23 ++++++++-
 dll/win32/netcfgx/netcfgx.rc                 |   3 ++
 dll/win32/netcfgx/res/Icon_Licence/COPYING   |  67 +++++++++++++++++++++++++++
 dll/win32/netcfgx/res/Icon_Licence/Tango.txt |   6 +++
 dll/win32/netcfgx/res/internet.ico           | Bin 0 -> 22486 bytes
 dll/win32/netcfgx/res/network.ico            | Bin 0 -> 22486 bytes
 dll/win32/netcfgx/resource.h                 |   4 ++
 dll/win32/netcfgx/tcpipconf_notify.c         |  23 ++++++++-
 12 files changed, 193 insertions(+), 19 deletions(-)

diff --git a/base/applications/msconfig/msconfig.c 
b/base/applications/msconfig/msconfig.c
index 01ee4f479b..3cbe4c5d81 100644
--- a/base/applications/msconfig/msconfig.c
+++ b/base/applications/msconfig/msconfig.c
@@ -21,7 +21,8 @@ HINSTANCE hInst = 0;
 HWND hMainWnd;                   /* Main Window */
 HWND hTabWnd;                    /* Tab Control Window */
 UINT uXIcon = 0, uYIcon = 0;     /* Icon sizes */
-HICON hDialogIcon = NULL;
+HICON hDialogIconBig = NULL;
+HICON hDialogIconSmall = NULL;
 
 void MsConfig_OnTabWndSelChange(void);
 
@@ -203,18 +204,25 @@ static
 VOID
 SetDialogIcon(HWND hDlg)
 {
-    if (hDialogIcon) DestroyIcon(hDialogIcon);
-
-    hDialogIcon = LoadImage(GetModuleHandle(NULL),
-                            MAKEINTRESOURCE(IDI_APPICON),
-                            IMAGE_ICON,
-                            uXIcon,
-                            uYIcon,
-                            0);
+    if (hDialogIconBig) DestroyIcon(hDialogIconBig);
+    if (hDialogIconSmall) DestroyIcon(hDialogIconSmall);
+
+    hDialogIconBig = LoadIconW(GetModuleHandle(NULL),
+                               MAKEINTRESOURCE(IDI_APPICON));
+    hDialogIconSmall = LoadImage(GetModuleHandle(NULL),
+                                 MAKEINTRESOURCE(IDI_APPICON),
+                                 IMAGE_ICON,
+                                 uXIcon,
+                                 uYIcon,
+                                 0);
+    SendMessage(hDlg,
+                WM_SETICON,
+                ICON_BIG,
+                (LPARAM)hDialogIconBig);
     SendMessage(hDlg,
                 WM_SETICON,
                 ICON_SMALL,
-                (LPARAM)hDialogIcon);
+                (LPARAM)hDialogIconSmall);
 }
 
 
@@ -292,8 +300,10 @@ MsConfigWndProc(HWND hDlg, UINT message, WPARAM wParam, 
LPARAM lParam)
                 DestroyWindow(hFreeLdrPage);
             if (hSystemPage)
                 DestroyWindow(hSystemPage);
-            if (hDialogIcon)
-                DestroyIcon(hDialogIcon);
+            if (hDialogIconBig)
+                DestroyIcon(hDialogIconBig);
+            if (hDialogIconSmall)
+                DestroyIcon(hDialogIconSmall);
             return DefWindowProc(hDlg, message, wParam, lParam);
     }
 
diff --git a/dll/shellext/netshell/lanstatusui.cpp 
b/dll/shellext/netshell/lanstatusui.cpp
index a5b4144dca..3d985e7db0 100644
--- a/dll/shellext/netshell/lanstatusui.cpp
+++ b/dll/shellext/netshell/lanstatusui.cpp
@@ -676,6 +676,23 @@ InitializePropertyDialog(
     pContext->dwAdapterIndex = dwAdapterIndex;
 }
 
+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(netshell_hInstance, 
MAKEINTRESOURCEW(IDI_SHELL_NETWORK_FOLDER));
+            SendMessageW(hwndDlg, WM_SETICON, ICON_BIG, (LPARAM)hIcon);
+            break;
+        }
+    }
+    return 0;
+}
+
 VOID
 ShowStatusPropertyDialog(
     LANSTATUSUI_CONTEXT *pContext,
@@ -688,9 +705,13 @@ ShowStatusPropertyDialog(
     ZeroMemory(&pinfo, sizeof(PROPSHEETHEADERW));
     ZeroMemory(hppages, sizeof(hppages));
     pinfo.dwSize = sizeof(PROPSHEETHEADERW);
-    pinfo.dwFlags = PSH_NOCONTEXTHELP | PSH_PROPTITLE | PSH_NOAPPLYNOW;
+    pinfo.dwFlags = PSH_NOCONTEXTHELP | PSH_PROPTITLE | PSH_NOAPPLYNOW |
+                    PSH_USEICONID | PSH_USECALLBACK;
     pinfo.phpage = hppages;
     pinfo.hwndParent = hwndDlg;
+    pinfo.hInstance = netshell_hInstance;
+    pinfo.pszIcon = MAKEINTRESOURCEW(IDI_SHELL_NETWORK_FOLDER);
+    pinfo.pfnCallback = PropSheetProc;
 
     if (pContext->pNet->GetProperties(&pProperties) == S_OK)
     {
diff --git a/dll/shellext/netshell/shfldr_netconnect.cpp 
b/dll/shellext/netshell/shfldr_netconnect.cpp
index a3398f36ec..07d2c1c068 100644
--- a/dll/shellext/netshell/shfldr_netconnect.cpp
+++ b/dll/shellext/netshell/shfldr_netconnect.cpp
@@ -549,6 +549,23 @@ ShowNetConnectionStatus(
     return lpOleCmd->Exec(&pdata->guidId, OLECMDID_NEW, 
OLECMDEXECOPT_DODEFAULT, NULL, NULL);
 }
 
+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(netshell_hInstance, 
MAKEINTRESOURCEW(IDI_SHELL_NETWORK_FOLDER));
+            SendMessageW(hwndDlg, WM_SETICON, ICON_BIG, (LPARAM)hIcon);
+            break;
+        }
+    }
+    return 0;
+}
+
 HRESULT
 ShowNetConnectionProperties(
     INetConnection *pNetConnect,
@@ -584,9 +601,13 @@ ShowNetConnectionProperties(
         ZeroMemory(&pinfo, sizeof(PROPSHEETHEADERW));
         ZeroMemory(hppages, sizeof(hppages));
         pinfo.dwSize = sizeof(PROPSHEETHEADERW);
-        pinfo.dwFlags = PSH_NOCONTEXTHELP | PSH_PROPTITLE | PSH_NOAPPLYNOW;
+        pinfo.dwFlags = PSH_NOCONTEXTHELP | PSH_PROPTITLE | PSH_NOAPPLYNOW |
+                        PSH_USEICONID | PSH_USECALLBACK;
+        pinfo.hInstance = netshell_hInstance;
+        pinfo.pszIcon = MAKEINTRESOURCEW(IDI_SHELL_NETWORK_FOLDER);
         pinfo.phpage = hppages;
         pinfo.hwndParent = hwnd;
+        pinfo.pfnCallback = PropSheetProc;
 
         pinfo.pszCaption = pProperties->pszwName;
         hr = pNCP->AddPages(hwnd, PropSheetExCallback, (LPARAM)&pinfo);
diff --git a/dll/win32/devmgr/devmgmt/MainWindow.cpp 
b/dll/win32/devmgr/devmgmt/MainWindow.cpp
index 50dc3a9207..b69778b641 100644
--- a/dll/win32/devmgr/devmgmt/MainWindow.cpp
+++ b/dll/win32/devmgr/devmgmt/MainWindow.cpp
@@ -155,9 +155,9 @@ CDeviceManager::Initialize(_In_z_ LPCTSTR lpCaption,
     wc.hIconSm = (HICON)LoadImage(g_hThisInstance,
                                   MAKEINTRESOURCE(IDI_MAIN_ICON),
                                   IMAGE_ICON,
-                                  16,
-                                  16,
-                                  LR_SHARED);
+                                  GetSystemMetrics(SM_CXSMICON),
+                                  GetSystemMetrics(SM_CYSMICON),
+                                  0);
 
     // Register the window
     if (RegisterClassExW(&wc))
diff --git a/dll/win32/netcfgx/inetcfgcomp_iface.c 
b/dll/win32/netcfgx/inetcfgcomp_iface.c
index 7d08afe7fc..71b5e028da 100644
--- a/dll/win32/netcfgx/inetcfgcomp_iface.c
+++ b/dll/win32/netcfgx/inetcfgcomp_iface.c
@@ -420,6 +420,23 @@ CreateNotificationObject(
     return S_OK;
 }
 
+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(netcfgx_hInstance, 
MAKEINTRESOURCEW(IDI_INTERNET));
+            SendMessageW(hwndDlg, WM_SETICON, ICON_BIG, (LPARAM)hIcon);
+            break;
+        }
+    }
+    return 0;
+}
+
 HRESULT
 WINAPI
 INetCfgComponent_fnRaisePropertyUi(
@@ -456,11 +473,15 @@ INetCfgComponent_fnRaisePropertyUi(
     }
     ZeroMemory(&pinfo, sizeof(PROPSHEETHEADERW));
     pinfo.dwSize = sizeof(PROPSHEETHEADERW);
-    pinfo.dwFlags = PSH_NOCONTEXTHELP | PSH_PROPTITLE | PSH_NOAPPLYNOW;
+    pinfo.dwFlags = PSH_NOCONTEXTHELP | PSH_PROPTITLE | PSH_NOAPPLYNOW |
+                    PSH_USEICONID | PSH_USECALLBACK;
     pinfo.u3.phpage = hppages;
     pinfo.hwndParent = hwndParent;
     pinfo.nPages = Pages;
+    pinfo.hInstance = netcfgx_hInstance;
     pinfo.pszCaption = This->pItem->szDisplayName;
+    pinfo.u.pszIcon = MAKEINTRESOURCEW(IDI_INTERNET);
+    pinfo.pfnCallback = PropSheetProc;
 
     iResult = PropertySheetW(&pinfo);
     CoTaskMemFree(hppages);
diff --git a/dll/win32/netcfgx/netcfgx.rc b/dll/win32/netcfgx/netcfgx.rc
index 8f37e78e8f..1d23c73a1a 100644
--- a/dll/win32/netcfgx/netcfgx.rc
+++ b/dll/win32/netcfgx/netcfgx.rc
@@ -20,6 +20,9 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
 /* UTF-8 */
 #pragma code_page(65001)
 
+IDI_NETWORK ICON "res/network.ico"
+IDI_INTERNET ICON "res/internet.ico"
+
 #ifdef LANGUAGE_BG_BG
     #include "lang/bg-BG.rc"
 #endif
diff --git a/dll/win32/netcfgx/res/Icon_Licence/COPYING 
b/dll/win32/netcfgx/res/Icon_Licence/COPYING
new file mode 100644
index 0000000000..e709d0c050
--- /dev/null
+++ b/dll/win32/netcfgx/res/Icon_Licence/COPYING
@@ -0,0 +1,67 @@
+Creative Commons Attribution-ShareAlike 2.5 License Agreement
+
+CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE LEGAL 
SERVICES. DISTRIBUTION OF THIS LICENSE DOES NOT CREATE AN ATTORNEY-CLIENT 
RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS INFORMATION ON AN "AS-IS" BASIS. 
CREATIVE COMMONS MAKES NO WARRANTIES REGARDING THE INFORMATION PROVIDED, AND 
DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM ITS USE.
+
+License
+
+THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE 
COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY 
COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS 
AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED.
+
+BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE 
BOUND BY THE TERMS OF THIS LICENSE. THE LICENSOR GRANTS YOU THE RIGHTS 
CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS.
+
+1. Definitions
+
+   1. "Collective Work" means a work, such as a periodical issue, anthology or 
encyclopedia, in which the Work in its entirety in unmodified form, along with 
a number of other contributions, constituting separate and independent works in 
themselves, are assembled into a collective whole. A work that constitutes a 
Collective Work will not be considered a Derivative Work (as defined below) for 
the purposes of this License.
+   2. "Derivative Work" means a work based upon the Work or upon the Work and 
other pre-existing works, such as a translation, musical arrangement, 
dramatization, fictionalization, motion picture version, sound recording, art 
reproduction, abridgment, condensation, or any other form in which the Work may 
be recast, transformed, or adapted, except that a work that constitutes a 
Collective Work will not be considered a Derivative Work for the purpose of 
this License. For the avoidance of d [...]
+   3. "Licensor" means the individual or entity that offers the Work under the 
terms of this License.
+   4. "Original Author" means the individual or entity who created the Work.
+   5. "Work" means the copyrightable work of authorship offered under the 
terms of this License.
+   6. "You" means an individual or entity exercising rights under this License 
who has not previously violated the terms of this License with respect to the 
Work, or who has received express permission from the Licensor to exercise 
rights under this License despite a previous violation.
+   7. "License Elements" means the following high-level license attributes as 
selected by Licensor and indicated in the title of this License: Attribution, 
ShareAlike.
+
+2. Fair Use Rights. Nothing in this license is intended to reduce, limit, or 
restrict any rights arising from fair use, first sale or other limitations on 
the exclusive rights of the copyright owner under copyright law or other 
applicable laws.
+
+3. License Grant. Subject to the terms and conditions of this License, 
Licensor hereby grants You a worldwide, royalty-free, non-exclusive, perpetual 
(for the duration of the applicable copyright) license to exercise the rights 
in the Work as stated below:
+
+   1. to reproduce the Work, to incorporate the Work into one or more 
Collective Works, and to reproduce the Work as incorporated in the Collective 
Works;
+   2. to create and reproduce Derivative Works;
+   3. to distribute copies or phonorecords of, display publicly, perform 
publicly, and perform publicly by means of a digital audio transmission the 
Work including as incorporated in Collective Works;
+   4. to distribute copies or phonorecords of, display publicly, perform 
publicly, and perform publicly by means of a digital audio transmission 
Derivative Works.
+   5.
+
+      For the avoidance of doubt, where the work is a musical composition:
+         1. Performance Royalties Under Blanket Licenses. Licensor waives the 
exclusive right to collect, whether individually or via a performance rights 
society (e.g. ASCAP, BMI, SESAC), royalties for the public performance or 
public digital performance (e.g. webcast) of the Work.
+         2. Mechanical Rights and Statutory Royalties. Licensor waives the 
exclusive right to collect, whether individually or via a music rights society 
or designated agent (e.g. Harry Fox Agency), royalties for any phonorecord You 
create from the Work ("cover version") and distribute, subject to the 
compulsory license created by 17 USC Section 115 of the US Copyright Act (or 
the equivalent in other jurisdictions).
+   6. Webcasting Rights and Statutory Royalties. For the avoidance of doubt, 
where the Work is a sound recording, Licensor waives the exclusive right to 
collect, whether individually or via a performance-rights society (e.g. 
SoundExchange), royalties for the public digital performance (e.g. webcast) of 
the Work, subject to the compulsory license created by 17 USC Section 114 of 
the US Copyright Act (or the equivalent in other jurisdictions).
+
+The above rights may be exercised in all media and formats whether now known 
or hereafter devised. The above rights include the right to make such 
modifications as are technically necessary to exercise the rights in other 
media and formats. All rights not expressly granted by Licensor are hereby 
reserved.
+
+4. Restrictions.The license granted in Section 3 above is expressly made 
subject to and limited by the following restrictions:
+
+   1. You may distribute, publicly display, publicly perform, or publicly 
digitally perform the Work only under the terms of this License, and You must 
include a copy of, or the Uniform Resource Identifier for, this License with 
every copy or phonorecord of the Work You distribute, publicly display, 
publicly perform, or publicly digitally perform. You may not offer or impose 
any terms on the Work that alter or restrict the terms of this License or the 
recipients' exercise of the rights g [...]
+   2. You may distribute, publicly display, publicly perform, or publicly 
digitally perform a Derivative Work only under the terms of this License, a 
later version of this License with the same License Elements as this License, 
or a Creative Commons iCommons license that contains the same License Elements 
as this License (e.g. Attribution-ShareAlike 2.5 Japan). You must include a 
copy of, or the Uniform Resource Identifier for, this License or other license 
specified in the previous sent [...]
+   3. If you distribute, publicly display, publicly perform, or publicly 
digitally perform the Work or any Derivative Works or Collective Works, You 
must keep intact all copyright notices for the Work and provide, reasonable to 
the medium or means You are utilizing: (i) the name of the Original Author (or 
pseudonym, if applicable) if supplied, and/or (ii) if the Original Author 
and/or Licensor designate another party or parties (e.g. a sponsor institute, 
publishing entity, journal) for a [...]
+
+5. Representations, Warranties and Disclaimer
+
+UNLESS OTHERWISE AGREED TO BY THE PARTIES IN WRITING, LICENSOR OFFERS THE WORK 
AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE 
MATERIALS, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT 
LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY, FITNESS FOR A PARTICULAR 
PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, 
OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT DISCOVERABLE. SOME 
JURISDICTIONS DO NOT ALLOW THE EXCLUSIO [...]
+
+6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, 
IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, 
INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS 
LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE 
POSSIBILITY OF SUCH DAMAGES.
+
+7. Termination
+
+   1. This License and the rights granted hereunder will terminate 
automatically upon any breach by You of the terms of this License. Individuals 
or entities who have received Derivative Works or Collective Works from You 
under this License, however, will not have their licenses terminated provided 
such individuals or entities remain in full compliance with those licenses. 
Sections 1, 2, 5, 6, 7, and 8 will survive any termination of this License.
+   2. Subject to the above terms and conditions, the license granted here is 
perpetual (for the duration of the applicable copyright in the Work). 
Notwithstanding the above, Licensor reserves the right to release the Work 
under different license terms or to stop distributing the Work at any time; 
provided, however that any such election will not serve to withdraw this 
License (or any other license that has been, or is required to be, granted 
under the terms of this License), and this Lic [...]
+
+8. Miscellaneous
+
+   1. Each time You distribute or publicly digitally perform the Work or a 
Collective Work, the Licensor offers to the recipient a license to the Work on 
the same terms and conditions as the license granted to You under this License.
+   2. Each time You distribute or publicly digitally perform a Derivative 
Work, Licensor offers to the recipient a license to the original Work on the 
same terms and conditions as the license granted to You under this License.
+   3. If any provision of this License is invalid or unenforceable under 
applicable law, it shall not affect the validity or enforceability of the 
remainder of the terms of this License, and without further action by the 
parties to this agreement, such provision shall be reformed to the minimum 
extent necessary to make such provision valid and enforceable.
+   4. No term or provision of this License shall be deemed waived and no 
breach consented to unless such waiver or consent shall be in writing and 
signed by the party to be charged with such waiver or consent.
+   5. This License constitutes the entire agreement between the parties with 
respect to the Work licensed here. There are no understandings, agreements or 
representations with respect to the Work not specified here. Licensor shall not 
be bound by any additional provisions that may appear in any communication from 
You. This License may not be modified without the mutual written agreement of 
the Licensor and You.
+
+Creative Commons is not a party to this License, and makes no warranty 
whatsoever in connection with the Work. Creative Commons will not be liable to 
You or any party on any legal theory for any damages whatsoever, including 
without limitation any general, special, incidental or consequential damages 
arising in connection to this license. Notwithstanding the foregoing two (2) 
sentences, if Creative Commons has expressly identified itself as the Licensor 
hereunder, it shall have all right [...]
+
+Except for the limited purpose of indicating to the public that the Work is 
licensed under the CCPL, neither party will use the trademark "Creative 
Commons" or any related trademark or logo of Creative Commons without the prior 
written consent of Creative Commons. Any permitted use will be in compliance 
with Creative Commons' then-current trademark usage guidelines, as may be 
published on its website or otherwise made available upon request from time to 
time.
+
+Creative Commons may be contacted at http://creativecommons.org/.
diff --git a/dll/win32/netcfgx/res/Icon_Licence/Tango.txt 
b/dll/win32/netcfgx/res/Icon_Licence/Tango.txt
new file mode 100644
index 0000000000..20f151d094
--- /dev/null
+++ b/dll/win32/netcfgx/res/Icon_Licence/Tango.txt
@@ -0,0 +1,6 @@
+The following icons are the property of the Tango project and are 
+released under Creative Commons Attribution-ShareAlike 2.5 License.
+Please see COPYING for details
+
+network.ico
+internet.ico
diff --git a/dll/win32/netcfgx/res/internet.ico 
b/dll/win32/netcfgx/res/internet.ico
new file mode 100644
index 0000000000..5b994e3440
Binary files /dev/null and b/dll/win32/netcfgx/res/internet.ico differ
diff --git a/dll/win32/netcfgx/res/network.ico 
b/dll/win32/netcfgx/res/network.ico
new file mode 100644
index 0000000000..1498e69384
Binary files /dev/null and b/dll/win32/netcfgx/res/network.ico differ
diff --git a/dll/win32/netcfgx/resource.h b/dll/win32/netcfgx/resource.h
index ac58a2234c..c04a2eae9b 100644
--- a/dll/win32/netcfgx/resource.h
+++ b/dll/win32/netcfgx/resource.h
@@ -1,5 +1,9 @@
 #pragma once
 
+/* icons */
+#define IDI_NETWORK     100
+#define IDI_INTERNET    101
+
 /* dialogs */
 #define IDD_TCPIP_BASIC_DLG  100
 #define IDD_TCPIP_ALTCF_DLG  101
diff --git a/dll/win32/netcfgx/tcpipconf_notify.c 
b/dll/win32/netcfgx/tcpipconf_notify.c
index 3d8f2fdd11..0fa79d860a 100644
--- a/dll/win32/netcfgx/tcpipconf_notify.c
+++ b/dll/win32/netcfgx/tcpipconf_notify.c
@@ -2090,6 +2090,23 @@ TcpipAdvancedDnsDlg(
     return FALSE;
 }
 
+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(netcfgx_hInstance, 
MAKEINTRESOURCEW(IDI_NETWORK));
+            SendMessageW(hwndDlg, WM_SETICON, ICON_BIG, (LPARAM)hIcon);
+            break;
+        }
+    }
+    return 0;
+}
+
 VOID
 LaunchAdvancedTcpipSettings(
     HWND hwndDlg,
@@ -2111,11 +2128,15 @@ LaunchAdvancedTcpipSettings(
 
     ZeroMemory(&pinfo, sizeof(PROPSHEETHEADERW));
     pinfo.dwSize = sizeof(PROPSHEETHEADERW);
-    pinfo.dwFlags = PSH_NOCONTEXTHELP | PSH_PROPTITLE | PSH_NOAPPLYNOW;
+    pinfo.dwFlags = PSH_NOCONTEXTHELP | PSH_PROPTITLE | PSH_NOAPPLYNOW |
+                    PSH_USEICONID | PSH_USECALLBACK;
     pinfo.u3.phpage = hppages;
     pinfo.nPages = 3;
     pinfo.hwndParent = hwndDlg;
+    pinfo.hInstance = netcfgx_hInstance;
     pinfo.pszCaption = szBuffer;
+    pinfo.u.pszIcon = MAKEINTRESOURCEW(IDI_NETWORK);
+    pinfo.pfnCallback = PropSheetProc;
 
     StoreTcpipBasicSettings(hwndDlg, This, FALSE);
     PropertySheetW(&pinfo);

Reply via email to