From 409385923ab23e2d0f590eb64a889c81e3af8bda Mon Sep 17 00:00:00 2001 From: kichik Date: Sun, 25 May 2003 15:33:48 +0000 Subject: [PATCH] Refresh banner's text when erased and minize along with the installer window git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@2568 212acab6-be3b-0410-9dea-997c60f758d6 --- Contrib/Banner/Banner.c | 80 ++++++++++++++++++++++++++++++++++------ Plugins/Banner.dll | Bin 2560 -> 3072 bytes TODO.txt | 4 -- 3 files changed, 68 insertions(+), 16 deletions(-) diff --git a/Contrib/Banner/Banner.c b/Contrib/Banner/Banner.c index 3eb3dedf..d6c92b07 100644 --- a/Contrib/Banner/Banner.c +++ b/Contrib/Banner/Banner.c @@ -14,45 +14,101 @@ HINSTANCE hInstance; HWND hwBanner; +HWND hwParent; char buf[1024]; unsigned int myatoi(char *s); +long oldProc; BOOL CALLBACK bannerProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { + if (hwndDlg == hwParent) + { + if (uMsg == WM_SIZE) + { + ShowWindow(hwBanner, wParam == SIZE_MINIMIZED ? SW_HIDE : SW_SHOW); + } + return CallWindowProc( + (WNDPROC) oldProc, + hwndDlg, + uMsg, + wParam, + lParam + ); + } if (uMsg == WM_INITDIALOG) { popstring(buf); - while (*(int*)buf == CHAR4_TO_DWORD('/','s','e','t')) { + while (*(int*)buf == CHAR4_TO_DWORD('/','s','e','t')) + { unsigned int id; + popstring(buf); id = myatoi(buf); + popstring(buf); - SetDlgItemText(hwndDlg,id,buf); + SetDlgItemText(hwndDlg, id, buf); + popstring(buf); } - SetWindowText(hwndDlg,buf); - SetDlgItemText(hwndDlg,IDC_STR,buf); + SetWindowText(hwndDlg, buf); + SetDlgItemText(hwndDlg, IDC_STR, buf); } + if (uMsg == WM_CLOSE) + { + hwBanner = 0; + DestroyWindow(hwndDlg); + } + return 0; +} + +DWORD WINAPI BannerCreator(void *lpParameter) +{ + oldProc = SetWindowLong((HWND) lpParameter, GWL_WNDPROC, (long)bannerProc); + + hwParent = (HWND) lpParameter; + + hwBanner = CreateDialog( + GetModuleHandle(0), + MAKEINTRESOURCE(IDD_VERIFY), + (HWND) lpParameter, + bannerProc + ); + + { + BOOL bRet; + MSG msg; + + while (hwBanner && (bRet = GetMessage(&msg, NULL, 0, 0))) + { + if (bRet != -1) + { + TranslateMessage(&msg); + DispatchMessage(&msg); + } + } + } + return 0; } void __declspec(dllexport) show(HWND hwndParent, int string_size, char *variables, stack_t **stacktop) { - EXDLL_INIT(); + DWORD dwThreadId; - hwBanner = CreateDialog( - GetModuleHandle(0), - MAKEINTRESOURCE(IDD_VERIFY), - hwndParent, - bannerProc - ); + g_stringsize = string_size; + g_stacktop = stacktop; + + CreateThread(0, 0, BannerCreator, (void *) hwndParent, 0, &dwThreadId); } void __declspec(dllexport) destroy(HWND hwndParent, int string_size, char *variables, stack_t **stacktop) { - DestroyWindow(hwBanner); + if (oldProc) + SetWindowLong(hwndParent, GWL_WNDPROC, oldProc); + + SendMessage(hwBanner, WM_CLOSE, 0, 0); } BOOL WINAPI _DllMainCRTStartup(HANDLE hInst, ULONG ul_reason_for_call, LPVOID lpReserved) diff --git a/Plugins/Banner.dll b/Plugins/Banner.dll index f4f12104ad4998569030e434937d2b20964c7467..b0dba2460b417b2e35438ce7e0da89c76f6aab54 100644 GIT binary patch literal 3072 zcmeHJOKcle6unNJ$PG?9m24?eQ!#E$n@W{ClTRUS15Ro;MI_Y9I1@@~nyEd+jwYUH zJSOcTB9)azG>rtJ8(0yA4T1$A7UiSJipzpUXjBPNfrPSPVU$uKBtDTUhVy1(+y%{w z1uDJKdH20@KXdOL$IpW=zD7HU$P3su(RFAhQD@zLDZ$+Q_@~YE@y^xIb}rQ~wD$zN1?qmbjXIX-qq;wSaA8fj{33~!}Qy??a-;OYy38qNmVaDL~D z`oKQu{M}680QBvjUUKwMHkDz%)yfiaq5+SWp8R?3=_qduJ4&i=lZ4bXv#85RoMKsH3 z5YBTO*`X#;qQ2Vc(eA%Ifnn>8Y!!URyV^R5D|8oU{Pl$vE6$z%{q~+xalJlack!^; z!7z`t5U>ka{j%K^c32+lk5|y(l^H+hAu5bX%e+9`h+LThYxT6k;j<%o)!aBx83iL( zCg3K|$GOTG9E&%Qi>370-^i67Fx`7u{8`ytV`Q)e@p7gCpGwE)!Z}pPIRV8dSYc!b z190gmjh4_eyb0S3`|TjX$!cO|t3jUk*g?M=RYqjAj42fF zv`X?a5^^Kfj8C4pH)02$Vm{w3u~sE{WI~tbd)S!lpcjUO9qfcUUS48#nC+6Z5dT2} zD>$qfD*j=c0dSxWgK~Fm*r7#46u!DJ+EF_9<%*Z^cq{H-!v7s-#RE&M%7wT;(NRjE z=}g0JJPb*E2t8k3WYwU4Jf1mTaXzN-^p&{%ZEPgXMQ?I>;di<{lk+=6#@ zA=bOLYq_znxGCf}%0#z#qVIuUfExf4E`+ZNpdE+-GLQx?0at;yfDeEbfXOWHC}*i- z9M0E(s@wvHm-LVFZ#@53Prs&LRJ2ousuF#&L(7{+YU*+?(X^*uH3#){K~qmFxwNK& z%hE|hRZKORfl3oS7aw{)KG4w~NoyL>n-o(Ku3sL>=F<8!&DBY&>F$&G#zp)PV`AF) zv!*)fQhVs6qG_&E!q8K_^m?6?(Wkdk&?3dM`6y#=#r|lS|h!4@>c(YB%o4t9N7TJ|Yh&b`>!A zaOQv(;6vPxbHG9Dj{wZG4;Q#Q4o)cJz`9h#Fxb>@fGo^cuiaq-xEI)%i>M(Yw=+j J$^WU3zW{+TfQtYC literal 2560 zcmeHIT}TvB6h5PiY^F93Ef^Tyr6ICpyQD%v#b&D&`Lnq0RF>xG4(`ghBeNqG1Qliw z%SQC`(2EfE5cC#N(L*g7Q4c|X(3=GHu;fcG2K6$1ch*gVl;}yw1K&O8eCKD*ow>|y z?Yct6MC1V+hv*Tskf6IRzq~-WqWW5c0d$xpYZbbEGlE(BK1Js0bxkfP-3VU0a2 zQyp8WiaPJq+$Ipa_J|(GRQq+*@yV!G<0Uvsh@b4~K31D2RmwUnnhJ~J&Qa=$s^&jPL`p-!R46{!& znk`)?dQfbnY^#6x^gg0d>40vxnz0c>Kd2>Rh7RsKFfA3vj0JaH;%tl;*y5-Ip%Rh=zadT7zSB_w2aW7TyYTm)S mxy>{D8lT|z_(T4Tzu_PF4FANx@UKhU1uJJGtCRf88~6#{HT1~< diff --git a/TODO.txt b/TODO.txt index 1cf2a605..bf236a9c 100644 --- a/TODO.txt +++ b/TODO.txt @@ -18,10 +18,6 @@ NSIS * move no custom to compiler (custom as just another inst type) -PLUGINS - -* Banner doesn't refresh and doesn't stay on top - -- Before NSIS 2 Final -- EXAMPLES