1 /* 2 * Internet control panel applet 3 * 4 * Copyright 2010 Detlef Riekenberg 5 * 6 * This library is free software; you can redistribute it and/or 7 * modify it under the terms of the GNU Lesser General Public 8 * License as published by the Free Software Foundation; either 9 * version 2.1 of the License, or (at your option) any later version. 10 * 11 * This library is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 * Lesser General Public License for more details. 15 * 16 * You should have received a copy of the GNU Lesser General Public 17 * License along with this library; if not, write to the Free Software 18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA 19 * 20 */ 21 22 #define NONAMELESSUNION 23 #define COBJMACROS 24 #define CONST_VTABLE 25 26 #include <stdarg.h> 27 #include <windef.h> 28 #include <winbase.h> 29 #include <wingdi.h> 30 #include <winuser.h> 31 #include <commctrl.h> 32 #include <cpl.h> 33 #include "ole2.h" 34 35 #include "wine/debug.h" 36 37 #include "inetcpl.h" 38 39 40 WINE_DEFAULT_DEBUG_CHANNEL(inetcpl); 41 42 DECLSPEC_HIDDEN HMODULE hcpl; 43 44 /********************************************************************* 45 * DllMain (inetcpl.@) 46 */ 47 BOOL WINAPI DllMain(HINSTANCE hdll, DWORD reason, LPVOID reserved) 48 { 49 TRACE("(%p, %d, %p)\n", hdll, reason, reserved); 50 51 switch (reason) 52 { 53 #ifndef __REACTOS__ 54 case DLL_WINE_PREATTACH: 55 return FALSE; /* prefer native version */ 56 #endif 57 58 case DLL_PROCESS_ATTACH: 59 DisableThreadLibraryCalls(hdll); 60 hcpl = hdll; 61 } 62 return TRUE; 63 } 64 65 /*********************************************************************** 66 * DllInstall (inetcpl.@) 67 */ 68 HRESULT WINAPI DllInstall(BOOL bInstall, LPCWSTR cmdline) 69 { 70 FIXME("(%s, %s): stub\n", bInstall ? "TRUE" : "FALSE", debugstr_w(cmdline)); 71 return S_OK; 72 } 73 74 /****************************************************************************** 75 * propsheet_callback [internal] 76 * 77 */ 78 static int CALLBACK propsheet_callback(HWND hwnd, UINT msg, LPARAM lparam) 79 { 80 81 TRACE("(%p, 0x%08x/%d, 0x%lx)\n", hwnd, msg, msg, lparam); 82 switch (msg) 83 { 84 case PSCB_INITIALIZED: 85 SendMessageW(hwnd, WM_SETICON, ICON_BIG, (LPARAM) LoadIconW(hcpl, MAKEINTRESOURCEW(ICO_MAIN))); 86 break; 87 } 88 return 0; 89 } 90 91 /****************************************************************************** 92 * display_cpl_sheets [internal] 93 * 94 * Build and display the dialog with all control panel propertysheets 95 * 96 */ 97 static void display_cpl_sheets(HWND parent) 98 { 99 INITCOMMONCONTROLSEX icex; 100 PROPSHEETPAGEW psp[NUM_PROPERTY_PAGES]; 101 PROPSHEETHEADERW psh; 102 DWORD id = 0; 103 104 OleInitialize(NULL); 105 /* Initialize common controls */ 106 icex.dwSize = sizeof(INITCOMMONCONTROLSEX); 107 icex.dwICC = ICC_LISTVIEW_CLASSES | ICC_BAR_CLASSES; 108 InitCommonControlsEx(&icex); 109 110 ZeroMemory(&psh, sizeof(psh)); 111 ZeroMemory(psp, sizeof(psp)); 112 113 /* Fill out all PROPSHEETPAGE */ 114 psp[id].dwSize = sizeof (PROPSHEETPAGEW); 115 psp[id].hInstance = hcpl; 116 psp[id].u.pszTemplate = MAKEINTRESOURCEW(IDD_GENERAL); 117 psp[id].pfnDlgProc = general_dlgproc; 118 id++; 119 120 psp[id].dwSize = sizeof (PROPSHEETPAGEW); 121 psp[id].hInstance = hcpl; 122 psp[id].u.pszTemplate = MAKEINTRESOURCEW(IDD_SECURITY); 123 psp[id].pfnDlgProc = security_dlgproc; 124 id++; 125 126 psp[id].dwSize = sizeof (PROPSHEETPAGEW); 127 psp[id].hInstance = hcpl; 128 psp[id].u.pszTemplate = MAKEINTRESOURCEW(IDD_CONTENT); 129 psp[id].pfnDlgProc = content_dlgproc; 130 id++; 131 132 /* Fill out the PROPSHEETHEADER */ 133 psh.dwSize = sizeof (PROPSHEETHEADERW); 134 psh.dwFlags = PSH_PROPSHEETPAGE | PSH_USEICONID | PSH_USECALLBACK; 135 psh.hwndParent = parent; 136 psh.hInstance = hcpl; 137 psh.u.pszIcon = MAKEINTRESOURCEW(ICO_MAIN); 138 psh.pszCaption = MAKEINTRESOURCEW(IDS_CPL_NAME); 139 psh.nPages = id; 140 psh.u3.ppsp = psp; 141 psh.pfnCallback = propsheet_callback; 142 143 /* display the dialog */ 144 PropertySheetW(&psh); 145 146 OleUninitialize(); 147 } 148 149 /********************************************************************* 150 * CPlApplet (inetcpl.@) 151 * 152 * Control Panel entry point 153 * 154 * PARAMS 155 * hWnd [I] Handle for the Control Panel Window 156 * command [I] CPL_* Command 157 * lParam1 [I] first extra Parameter 158 * lParam2 [I] second extra Parameter 159 * 160 * RETURNS 161 * Depends on the command 162 * 163 */ 164 LONG CALLBACK CPlApplet(HWND hWnd, UINT command, LPARAM lParam1, LPARAM lParam2) 165 { 166 TRACE("(%p, %u, 0x%lx, 0x%lx)\n", hWnd, command, lParam1, lParam2); 167 168 switch (command) 169 { 170 case CPL_INIT: 171 return TRUE; 172 173 case CPL_GETCOUNT: 174 return 1; 175 176 case CPL_INQUIRE: 177 { 178 CPLINFO *appletInfo = (CPLINFO *) lParam2; 179 180 appletInfo->idIcon = ICO_MAIN; 181 appletInfo->idName = IDS_CPL_NAME; 182 appletInfo->idInfo = IDS_CPL_INFO; 183 appletInfo->lData = 0; 184 return TRUE; 185 } 186 187 case CPL_DBLCLK: 188 display_cpl_sheets(hWnd); 189 break; 190 } 191 192 return FALSE; 193 } 194 195 /********************************************************************* 196 * LaunchInternetControlPanel (inetcpl.@) 197 * 198 * Launch the Internet Control Panel dialog 199 * 200 * PARAMS 201 * parent [I] Handle for the parent window 202 * 203 * RETURNS 204 * Success: TRUE 205 * 206 * NOTES 207 * rundll32 callable function: rundll32 inetcpl.cpl,LaunchInternetControlPanel 208 * 209 */ 210 BOOL WINAPI LaunchInternetControlPanel(HWND parent) 211 { 212 display_cpl_sheets(parent); 213 return TRUE; 214 } 215 216 /********************************************************************* 217 * LaunchConnectionDialog (inetcpl.@) 218 * 219 */ 220 BOOL WINAPI LaunchConnectionDialog(HWND hParent) 221 { 222 FIXME("(%p): stub\n", hParent); 223 return FALSE; 224 } 225 226 /********************************************************************* 227 * LaunchInternetControlPanel (inetcpl.@) 228 * 229 */ 230 BOOL WINAPI LaunchPrivacyDialog(HWND hParent) 231 { 232 FIXME("(%p): stub\n", hParent); 233 return FALSE; 234 } 235