From 6d4f3d5d3ab51d551bbab6d8ef6df869e3bf67db Mon Sep 17 00:00:00 2001 From: Owen Rudge Date: Mon, 21 Jul 2008 19:42:07 +0100 Subject: [PATCH] appwiz.cpl: Display Add/Remove Programs dialog. --- dlls/appwiz.cpl/En.rc | 18 +++++++++++ dlls/appwiz.cpl/appwiz.c | 70 ++++++++++++++++++++++++++++++++++++++++ dlls/appwiz.cpl/res.h | 11 +++++++ 3 files changed, 99 insertions(+) diff --git a/dlls/appwiz.cpl/En.rc b/dlls/appwiz.cpl/En.rc index 240793bb646..ad477e37bdb 100644 --- a/dlls/appwiz.cpl/En.rc +++ b/dlls/appwiz.cpl/En.rc @@ -27,3 +27,21 @@ STRINGTABLE IDS_CPL_DESC, "Allows you to install new software, or remove existing software from your computer." IDS_TAB1_TITLE, "Applications" } + +/* TODO: it's best to use the constant WC_LISTVIEW instead of SysListView32 directly, but the Wine resource compiler doesn't seem to like that... */ + +IDD_MAIN DIALOG 0, 0, 320, 220 +STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Install/Uninstall" +FONT 8, "MS Sans Serif" +{ + CONTROL "To install a new program from a floppy disk, CD-ROM drive, or your hard drive, click Install.", 1000, "STATIC", SS_LEFT | WS_CHILD | WS_VISIBLE | WS_GROUP, 40, 7, 270, 20 + CONTROL "&Install...", IDC_INSTALL, "BUTTON", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 246, 26, 64, 14 + CONTROL "", -1, "STATIC", SS_LEFT | SS_SUNKEN | WS_CHILD | WS_VISIBLE, 7, 46, 303, 1 + CONTROL 2, 1001, "STATIC", SS_ICON | WS_CHILD | WS_VISIBLE, 7, 7, 21, 20 + CONTROL "The following software can be automatically removed. To remove a program or to modify its installed components, select it from the list and click Add/Remove.", 1002, "STATIC", SS_LEFT | WS_CHILD | WS_VISIBLE | WS_GROUP, 40, 57, 270, 36 + CONTROL "", IDL_PROGRAMS, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SORTASCENDING | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 7, 90, 303, 100 + CONTROL "Add/&Remove...", IDC_ADDREMOVE, "BUTTON", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 246, 198, 64, 14 + CONTROL "&Support Info...", IDC_SUPPORT_INFO, "button", BS_PUSHBUTTON | BS_CENTER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 176, 198, 64, 14 + CONTROL 3, 1003, "STATIC", SS_ICON | WS_CHILD | WS_VISIBLE, 7, 57, 21, 20 +} diff --git a/dlls/appwiz.cpl/appwiz.c b/dlls/appwiz.cpl/appwiz.c index 76658de5a74..fd0637181af 100644 --- a/dlls/appwiz.cpl/appwiz.c +++ b/dlls/appwiz.cpl/appwiz.c @@ -38,12 +38,16 @@ #include #include #include +#include #include #include "res.h" WINE_DEFAULT_DEBUG_CHANNEL(appwizcpl); +/* define a maximum length for various buffers we use */ +#define MAX_STRING_LEN 1024 + static HINSTANCE hInst; /****************************************************************************** @@ -64,6 +68,61 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, return TRUE; } +/****************************************************************************** + * Name : MainDlgProc + * Description: Callback procedure for main tab + * Parameters : hWnd - hWnd of the window + * msg - reason for calling function + * wParam - additional parameter + * lParam - additional parameter + * Returns : Dependant on message + */ +static BOOL CALLBACK MainDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) +{ + return FALSE; +} + +/****************************************************************************** + * Name : StartApplet + * Description: Main routine for applet + * Parameters : hWnd - hWnd of the Control Panel + */ +static void StartApplet(HWND hWnd) +{ + PROPSHEETPAGEW psp; + PROPSHEETHEADERW psh; + WCHAR tab_title[MAX_STRING_LEN], app_title[MAX_STRING_LEN]; + + /* Load the strings we will use */ + LoadStringW(hInst, IDS_TAB1_TITLE, tab_title, sizeof(tab_title) / sizeof(tab_title[0])); + LoadStringW(hInst, IDS_CPL_TITLE, app_title, sizeof(app_title) / sizeof(app_title[0])); + + /* Fill out the PROPSHEETPAGE */ + psp.dwSize = sizeof (PROPSHEETPAGEW); + psp.dwFlags = PSP_USETITLE; + psp.hInstance = hInst; + psp.pszTemplate = MAKEINTRESOURCEW (IDD_MAIN); + psp.pszIcon = NULL; + psp.pfnDlgProc = (DLGPROC) MainDlgProc; + psp.pszTitle = tab_title; + psp.lParam = 0; + + /* Fill out the PROPSHEETHEADER */ + psh.dwSize = sizeof (PROPSHEETHEADERW); + psh.dwFlags = PSH_PROPSHEETPAGE | PSH_USEICONID; + psh.hwndParent = hWnd; + psh.hInstance = hInst; + psh.pszIcon = NULL; + psh.pszCaption = app_title; + psh.nPages = 1; + psh.ppsp = &psp; + psh.pfnCallback = NULL; + psh.nStartPage = 0; + + /* Display the property sheet */ + PropertySheetW (&psh); +} + /****************************************************************************** * Name : CPlApplet * Description: Entry point for Control Panel applets @@ -75,9 +134,16 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, */ LONG CALLBACK CPlApplet(HWND hwndCPL, UINT message, LPARAM lParam1, LPARAM lParam2) { + INITCOMMONCONTROLSEX iccEx; + switch (message) { case CPL_INIT: + iccEx.dwSize = sizeof(iccEx); + iccEx.dwICC = ICC_LISTVIEW_CLASSES | ICC_TAB_CLASSES; + + InitCommonControlsEx(&iccEx); + return TRUE; case CPL_GETCOUNT: @@ -94,6 +160,10 @@ LONG CALLBACK CPlApplet(HWND hwndCPL, UINT message, LPARAM lParam1, LPARAM lPara break; } + + case CPL_DBLCLK: + StartApplet(hwndCPL); + break; } return FALSE; diff --git a/dlls/appwiz.cpl/res.h b/dlls/appwiz.cpl/res.h index 513c322e209..ff23bcba433 100644 --- a/dlls/appwiz.cpl/res.h +++ b/dlls/appwiz.cpl/res.h @@ -19,6 +19,17 @@ * */ +/* Dialogs */ + +#define IDD_MAIN 1 +#define IDD_INFO 2 + +/* Dialog controls */ +#define IDC_INSTALL 1010 +#define IDL_PROGRAMS 1011 +#define IDC_ADDREMOVE 1012 +#define IDC_SUPPORT_INFO 1013 + /* Icons */ #define ICO_MAIN 1