From 74a973b5a0d47356a706e1fa574de825639d564e Mon Sep 17 00:00:00 2001 From: kramm Date: Thu, 22 May 2008 13:56:31 +0000 Subject: [PATCH] added background, extra 'finished' window --- installer/installer.c | 135 ++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 117 insertions(+), 18 deletions(-) diff --git a/installer/installer.c b/installer/installer.c index 3e0e95e..479fc0a 100644 --- a/installer/installer.c +++ b/installer/installer.c @@ -36,8 +36,9 @@ static char*install_path = "c:\\swftools\\"; static char pathBuf[1024]; static int do_abort = 0; -static HWND wnd_progress = 0; static HWND wnd_params = 0; +static HWND wnd_progress = 0; +static HWND wnd_finish = 0; static HBITMAP logo; @@ -63,6 +64,11 @@ struct params_data { HWND edit; HWND explore; }; +struct finish_data { + int width,height; + int ok; + HWND installButton; +}; LRESULT CALLBACK WindowFunc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { @@ -80,6 +86,9 @@ LRESULT CALLBACK WindowFunc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lPara if(cs->lpCreateParams && !strcmp((char*)cs->lpCreateParams, "progress")) { wnd_progress = hwnd; } + if(cs->lpCreateParams && !strcmp((char*)cs->lpCreateParams, "finish")) { + wnd_finish = hwnd; + } } if(hwnd == 0) { @@ -336,6 +345,43 @@ LRESULT CALLBACK WindowFunc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lPara default: return DefWindowProc(hwnd, message, wParam, lParam); } + } else if(hwnd == wnd_finish) { + static struct finish_data data; + switch(message) + { + case WM_CREATE: { + + /* TODO: + + "swftools has been installed into directory %s + successfully" + + [x] Create Desktop Shortcut + [x] Create Start Menu Entry + + */ + + RECT rc; + CREATESTRUCT*cs = ((LPCREATESTRUCT)lParam); + GetClientRect (hwnd, &rc); + data.width = rc.right - rc.left; + data.height = rc.bottom - rc.top; + + data.installButton = CreateWindow ( + WC_BUTTON, + "Finish", + WS_CHILD | WS_VISIBLE | WS_TABSTOP, + (data.width - 80)/2, + data.height - 40, + 80, + 32, + hwnd, /* Parent */ + (HMENU)0xabcd, + cs->hInstance, + NULL + ); + } + } } return DefWindowProc(hwnd, message, wParam, lParam); } @@ -394,10 +440,9 @@ int addRegistryEntries(char*install_dir) int WINAPI WinMain(HINSTANCE me,HINSTANCE hPrevInst,LPSTR lpszArgs, int nWinMode) { WNDCLASSEX wcl; - wcl.hInstance = me; - wcl.lpszClassName= "SWFTools-Installer"; wcl.lpfnWndProc = WindowFunc; + wcl.lpszClassName= "SWFTools-Install"; wcl.style = CS_HREDRAW | CS_VREDRAW; wcl.hIcon = LoadIcon(NULL, IDI_APPLICATION); wcl.hIconSm = LoadIcon(NULL, IDI_APPLICATION); @@ -405,15 +450,44 @@ int WINAPI WinMain(HINSTANCE me,HINSTANCE hPrevInst,LPSTR lpszArgs, int nWinMode wcl.lpszMenuName = NULL; //no menu wcl.cbClsExtra = 0; wcl.cbWndExtra = 0; - //wcl.hbrBackground= (HBRUSH) GetStockObject(DKGRAY_BRUSH); - //wcl.hbrBackground= (HBRUSH) GetStockObject (WHITE_BRUSH); wcl.hbrBackground= (HBRUSH) GetStockObject(LTGRAY_BRUSH); - //wcl.hbrBackground= (HBRUSH) GetStockObject (GRAY_BRUSH); wcl.cbSize = sizeof(WNDCLASSEX); + WNDCLASSEX wcl_background; + memcpy(&wcl_background, &wcl, sizeof(WNDCLASSEX)); + wcl_background.lpszClassName= "SWFTools Installer"; + wcl_background.hbrBackground= CreateSolidBrush(RGB(0, 0, 128)); + if(!RegisterClassEx(&wcl)) { - return 0; + MessageBox(0, "Could not register window class", "Install.exe", MB_OK); + return 1; } + if(!RegisterClassEx(&wcl_background)) { + MessageBox(0, "Could not register window class 2", "Install.exe", MB_OK); + return 1; + } + + HWND background = CreateWindow(wcl_background.lpszClassName, "Setup SWFTools", + 0, 0, 0, + GetSystemMetrics(SM_CXFULLSCREEN), + GetSystemMetrics(SM_CYFULLSCREEN), + NULL, NULL, me, NULL); + + if(!background) { + MessageBox(0, "Could not create installation background window", "Install.exe", MB_OK); + return 1; + } + + ShowWindow(background, SW_SHOWMAXIMIZED); + UpdateWindow(background); + + RECT r = {0,0,0,0}; + GetWindowRect(background, &r); + int xx = 320, yy = 200; + if(r.right - r.left > 320) + xx = r.right - r.left; + if(r.right - r.left > 200) + yy = r.bottom - r.top; logo = LoadBitmap(me, "SWFTOOLS"); @@ -424,20 +498,25 @@ int WINAPI WinMain(HINSTANCE me,HINSTANCE hPrevInst,LPSTR lpszArgs, int nWinMode CoInitialize(0); InitCommonControls(); - CreateWindow ( + HWND installpath_window = CreateWindow( wcl.lpszClassName, /* Class name */ - "SWFTools Installer", /* Caption */ - WS_OVERLAPPEDWINDOW&(~WS_SIZEBOX), /* Style */ - CW_USEDEFAULT, /* Initial x (use default) */ - CW_USEDEFAULT, /* Initial y (use default) */ + "SWFTools Installer", /* Caption */ + WS_CHILD | WS_CAPTION, + (xx-320)/2, /* Initial x */ + (yy-200)/2, /* Initial y */ 320, /* Initial x size */ 200, /* Initial y size */ - NULL, /* No parent window */ + background, /* No parent window */ NULL, /* No menu */ me, /* This program instance */ (void*)"params" /* Creation parameters */ ); + if(!installpath_window) { + MessageBox(0, "Could not create installation window", "Install.exe", MB_OK); + return 1; + } + ShowWindow (wnd_params, nWinMode); UpdateWindow (wnd_params); @@ -450,7 +529,7 @@ int WINAPI WinMain(HINSTANCE me,HINSTANCE hPrevInst,LPSTR lpszArgs, int nWinMode } if(do_abort) - return 0; + return 1; /*char buf[1024]; sprintf(buf, "Do you want me to install SWFTools into the directory %s now?", install_path); @@ -461,12 +540,12 @@ int WINAPI WinMain(HINSTANCE me,HINSTANCE hPrevInst,LPSTR lpszArgs, int nWinMode CreateWindow ( wcl.lpszClassName, /* Class name */ "Installing...", /* Caption */ - WS_OVERLAPPEDWINDOW&(~WS_SIZEBOX), /* Style */ - CW_USEDEFAULT, /* Initial x (use default) */ - CW_USEDEFAULT, /* Initial y (use default) */ + WS_CHILD | WS_CAPTION, + //WS_OVERLAPPEDWINDOW&(~WS_SIZEBOX), /* Style */ + (xx-260)/2, (yy-128)/2, 260, /* Initial x size */ 128, /* Initial y size */ - NULL, /* No parent window */ + background, /* No parent window */ NULL, /* No menu */ me, /* This program instance */ (void*)"progress" /* Creation parameters */ @@ -481,6 +560,26 @@ int WINAPI WinMain(HINSTANCE me,HINSTANCE hPrevInst,LPSTR lpszArgs, int nWinMode while(wnd_progress) processMessages(); + CreateWindow ( + wcl.lpszClassName, /* Class name */ + "Finished", /* Caption */ + WS_CHILD | WS_CAPTION, + //WS_OVERLAPPEDWINDOW&(~WS_SIZEBOX), /* Style */ + (xx-320)/2, (yy-160)/2, + 320, /* Initial x size */ + 160, /* Initial y size */ + background, /* No parent window */ + NULL, /* No menu */ + me, /* This program instance */ + (void*)"finish" /* Creation parameters */ + ); + ShowWindow(wnd_finish, nWinMode); + UpdateWindow(wnd_finish); + + while(wnd_finish) + processMessages(); + + if(!addRegistryEntries(install_path)) { success = 0; MessageBox(0, "Couldn't create Registry Entries", "SWFTools Install", MB_OK|MB_ICONERROR); -- 1.7.10.4