From e9efbba1a2cf7f3a0c6283d20748bb3b0d9d16a5 Mon Sep 17 00:00:00 2001 From: kichik Date: Fri, 4 Mar 2005 13:04:14 +0000 Subject: [PATCH] implemented feature request #711900 - StartMenu SetCtlColors support git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@3916 212acab6-be3b-0410-9dea-997c60f758d6 --- Contrib/StartMenu/Readme.txt | 15 +++++++++- Contrib/StartMenu/StartMenu.c | 52 +++++++++++++++++++++++++++------- Plugins/StartMenu.dll | Bin 6656 -> 6656 bytes 3 files changed, 55 insertions(+), 12 deletions(-) diff --git a/Contrib/StartMenu/Readme.txt b/Contrib/StartMenu/Readme.txt index 0103d904..74f39fa2 100644 --- a/Contrib/StartMenu/Readme.txt +++ b/Contrib/StartMenu/Readme.txt @@ -29,6 +29,19 @@ prefixed with '>'. The function does not push the full path but only the selecte sub-folder. It's up to you to decide if to put it in the current user or all users start menu. -Look at Example.nsi for an example. +To set properties of the controls on the page, such as colors and fonts use Init +and Show instead of Select. Init will push the HWND of the page on the stack, +or an error string. For example: + +StartMenu::Init /NOUNLOAD "Test" +Pop $0 +IntCmp $0 0 failed +GetDlgItem $0 $0 1003 +SetCtlColors $0 "" FF0000 +StartMenu::Show +# continue as with Select here +failed: + +Look at Example.nsi for a full example (without Init and Select). Created by Amir Szekely (aka KiCHiK) \ No newline at end of file diff --git a/Contrib/StartMenu/StartMenu.c b/Contrib/StartMenu/StartMenu.c index 5c5262d9..9c9d37ce 100644 --- a/Contrib/StartMenu/StartMenu.c +++ b/Contrib/StartMenu/StartMenu.c @@ -27,7 +27,7 @@ BOOL CALLBACK dlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); BOOL CALLBACK ParentWndProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); void AddFolderFromReg(int nFolder); -void __declspec(dllexport) Select(HWND hwndParent, int string_size, char *variables, stack_t **stacktop) +void __declspec(dllexport) Init(HWND hwndParent, int string_size, char *variables, stack_t **stacktop) { HWND hwStartMenuSelect; @@ -71,11 +71,17 @@ void __declspec(dllexport) Select(HWND hwndParent, int string_size, char *variab { popstring(checkbox); } + if (popstring(buf)) + { *buf = 0; + } } + if (*buf) + { lstrcpy(progname, buf); + } else { pushstring("error reading parameters"); @@ -87,23 +93,40 @@ void __declspec(dllexport) Select(HWND hwndParent, int string_size, char *variab if (!hwStartMenuSelect) { pushstring("error creating dialog"); - g_done = 1; + return; } else { lpWndProcOld = (void *) SetWindowLong(hwndParent, DWL_DLGPROC, (long) ParentWndProc); + wsprintf(buf, "%u", hwStartMenuSelect); + pushstring(buf); } + } +} - while (!g_done) - { - MSG msg; - int nResult = GetMessage(&msg, NULL, 0, 0); - if (!IsDialogMessage(hwStartMenuSelect,&msg) && !IsDialogMessage(hwndParent,&msg) && !TranslateMessage(&msg)) - DispatchMessage(&msg); - } - DestroyWindow(hwStartMenuSelect); +void __declspec(dllexport) Show(HWND hwndParent, int string_size, char *variables, stack_t **stacktop) +{ + HWND hwStartMenuSelect = g_hwStartMenuSelect; - SetWindowLong(hwndParent, DWL_DLGPROC, (long) lpWndProcOld); + while (!g_done) + { + MSG msg; + int nResult = GetMessage(&msg, NULL, 0, 0); + if (!IsDialogMessage(hwStartMenuSelect,&msg) && !IsDialogMessage(hwndParent,&msg) && !TranslateMessage(&msg)) + DispatchMessage(&msg); + } + DestroyWindow(hwStartMenuSelect); + + SetWindowLong(hwndParent, DWL_DLGPROC, (long) lpWndProcOld); +} + +void __declspec(dllexport) Select(HWND hwndParent, int string_size, char *variables, stack_t **stacktop) +{ + Init(hwndParent, string_size, variables, stacktop); + if (g_hwStartMenuSelect) + { + popstring(buf); + Show(hwndParent, string_size, variables, stacktop); } } @@ -345,6 +368,13 @@ BOOL CALLBACK dlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) pushstring(buf); pushstring("success"); } + case WM_CTLCOLORSTATIC: + case WM_CTLCOLOREDIT: + case WM_CTLCOLORDLG: + case WM_CTLCOLORBTN: + case WM_CTLCOLORLISTBOX: + // let the NSIS window handle colors, it knows best + return SendMessage(hwParent, uMsg, wParam, lParam); break; } return 0; diff --git a/Plugins/StartMenu.dll b/Plugins/StartMenu.dll index 0ea07a91f7ef1b90f40eb46f1d446afece0b392b..b193ac8533fc6f5a2cdb5dcaba4ad7149350114a 100644 GIT binary patch delta 3163 zcmc&$e{2)?75|=NCnmUwX?-*+p#*YivnI56_Fc{%F{349qYIO%u}w<|(1vi_TuQ+P zT1B$K3Bo;Kgkuv!)s`rzVqHtCvQ0=u!~7~^Lo1~vVMt?WLz^SJQbfDJfO7kM&q>Jm zZ-33!yYG9S?|bk2-uu4q_bw?W#XXJ8g&u!%f(>2xqWL~uYED2NxSVco#mIbhy?F`7 zy#p7`@!jDI=J>+eR}^YP9{2?o5Yocf$o1CR=fI<1_OMuaPEFNnWDj#th_k-}puzT55odR%f2EH&`wg z5^)BzPlHYRDgR7)_XmhYlj>m*Ilc;z5`}ie80gN#9cOJE+%ZHTBo|ebi4(Qv1n?!w z%5l6z>3xEpS0&1vM~E||t~R83urb(!K(*oSk+jrK6Q5h6RAI4PosxMN z>ei6K9)d<#sRSDAKZtS}?0Y~`ryaqZO(B4@a}h_|@@1#`T>35B;|a6I#o;t#u$9pC zWO7BG%)GXfR+945ITG{r(QOH*GWLKv&tRRS9&al0v0m;&1h z4eVKILD~ z9Y!XT(aV~j?n!{kgK8dN@;o1)%;1W)Wv5d4c4`(4!LC>TrkG1q8UtF4>r6Ls6(N}j5w!O^&kUvph>G&+P0 zi5^OW-3j%fjaHnrE_0y{f4(T*dLrxW@H2=aLTCIt^}&*=L?s#^HdXWUFfqGb$zp-9 zF&Hog!{{iN!S0~m?6B#WbGE$O!0D%+x-;e7Ux6QsR~y#+UC{jD&8yQ!Ze9(C#_R`& z&O=R;XizG_UlMY>(0Yjp< zjlpiAlm6I!*sQ=HY(?l41Z=5SC0Zxvt!w4Px=xM{Mvz(~DA9;DcVbP0T@N415JCmq zS-8`b+^CrD8jZ6TN-8s2Z=lo^cVwl?_b2I9F}fcE<2ou2YzJN70c?+nB_=AyIJDb; z162S?$8gH&S2K-e=4ndl%^G5h_Jt;TQ`>GO5HZO##v#o zv_sAC(brx2cP39y(C$|4Ar+UD3+!7D(YJ(35M+HSQ#A7DY3H=rG=l2iYp3c?)D;>5 zZCPlWLZyvMNk26sv8T{swT1db&~RK(MK@nk?Pz0~y!i?OZ!Y?1wgWFxqFS;m5VTgf z6JC4~7Rp07ZDXh8zA;S+#{1wXb&FA%cro4aoE1-(T8o#cC$j=Clho;Uz0UC_W7pqt z%$!A!-AMN_T&T`iutV$4g6o)Lv(k#s2SWsX$gwfObA&txqQBcS2`QdMhzs;MC=Yoq z#^*sVfv!PzWBdXm{q2Qa4AeSm|25_;)r3q1JpsA~`FV`3AQiL;v>mh$^bY8^)g(bq zg82jJ3Mdb{3o3)d^DsUJIt%gZqE4gMOy`{mGXsn>ViCuy$Rn<5~TWPFdgJeCdc~%FmgVV_%CS zNSQ&_NYtdukgtP=X({lvn0y!=H-!*u4Iz_2P7t-QkYH@phS;Lj>*7zhN26rny0tM9 zTpeBg3I^r1&G??o?{!sLYU281u5}hdj%;@&nImOWN0>wa3l{S%U&BAe^SsQ@<-gA_ z;aBl%_$dDd-^KUvZ}W%v5BOvJS^jhW3jYuO4sQ{h!ncGO!V|(Xf+T!bXciU;VWCxc zSx|(H!dBsc&@22(I3}DHJ`)Coe+qfwUxM8|#r>H3N%ul`#J$|T#{H^$i~DEpzJ&Xt z`?7n)eb-&?nc?}K=e*~0&)+Y3H8t#R_-R95!=Z-XHC%7F)9{GQ%MEg) zJYQZcx5=-|o$@yMko>;f@{xR0J}#e;Ka>9=|6LxEhvhqRvDe|9;hpbo_pbG>_x{A& u>wV8V=)K|nx0msi`CPtPKEH3FFW_tQ{m8e?r}^IXo$+1rUGt&NAN>c5O4>O9 delta 2908 zcmc&$eQZd-KS0cBKWEd<)Gh(D0(EL6%q6c}RM{qA!} zqW-tP_M-FdIlp_(xxahfxi?P9DfwU%cX1%JdczmmuUrk!$hB}U?9m(9a3@CYpSQzp z7!QrUZ;r1|TrtO|zV)oiV#w4JX(6PQvyu8W_f`!2)y*{y{QK*rLp&jC;Bdm&z|~or zIb*;gSv{}^YO6~d<6V2=m<$_#;l6D7)N0)4zQ>(9{=DTSZa}an+x0u?J8pelncia0 zmfJ<*(APPm9kFbAnW;O}`$dFA4iB{uN4DGnjJjGq#F5Dz-Wnv1#2j^(KpbPk93g+$ z>LZS5eh6wR#PlaBGRLs8?puO@)7yZkDx70!QA9L{isA;Cjs*hZ|`~_RpBZ8`$K(uB>JpCXYVmLW`1Vv4(PwJtcA%&ESL?Znyw@fSf z9jLPi^PM&tS>s!IeSEFrY?t>-E5T!7Gj3F z%7B_#b&@SMm8`J&Z7VTy#Z_FJ@nLZtAAyU0e)Fcc9VDuE^7anh_a>m2HW8(xbHlt- z4-FcglA5_Ho8Hxq`Br0X3BS=pN3&txt@rUMY+xztj*7l|yw}F}F3s9tWj?YJB2BJN zpW^%AvM1|f6;4#B6Kvamen{!q2s~m@>NmI&id{!bP55Vro?}dwc8_wgu z!ZIvJcj!)0qVr7N(H-Kjz&SSe9unYa zc8_`sN%0{g^m+%X<)p4YOpQ^Ts_tbMDl#>b(AX-OTt((@&>wNsC-hLtxMi*)O$t58p^kwmSfos( zl_BFZ$TV9vp>gnIWI0i~nU4q8$Gcz~sx1qxUkZ877;0Qcts{_{Ws z9ZiSW1w-Oq&4Q4sJog_;P1T*Bd;paIU6LP%s(LI~G@j%G`A=Y`&v{T6PXugOe^8f- zeMq?=yT=@fcI}%uxmAEL>|le&sk_k@)8vQQx@LMoe{XRs&ln4LZ&c?rQg?=B9W=AD zLZ-ufLy?plcQQCxSZ%Ah8p_qs-@21THWYFMZ7gftwjmN3FHN5*+7Ln30HlGsSf*5n z-J4{Dy%V;P{b)w!QB`O|bd$YZ!=ZOF!u{c$MX`vPjJ}nG8LjGH%YT;rfgRbHCUrq;o}+A6CDkFJ%Pl zF6w6&pIKb!Wb|vHp9)`rUQ318#ZBUi(0NM=wTqz<8=@MC(QBF={mtrPUhmNRjOWXo zPcj})KMfDH+=}{7ot7DAMiKevB(2PeE?LUWD;7M)vGO+*ZiisrY|k&QeFn0?1A1evE4&9gyvi-H;UI z5adroP=^7as!fw+=pC7@Cf8}$WI|Zg6xLym}3t=MS$r$fR}kN&cYlZ)C#O> z7Pg#`1lBeSJHQ*3iiQ908Z`cIH89?-IA)x3e8YIb;XhtE|CiiqY|Q+T#m4usO%CHD zxd{6*Y`-SKr@&m|gn^z@KuS5Mco@#6!Qh1?;h+weGhjvsXHV?Vi$ z&#Ro|lFdjqPgp242#ta)EE84=t-?m3OVEVx2))9K!l3Yq@P_bv;k0l`7!^Jd#)OB0 zO92zSBdMyHgSuniQgCZiWzZGJSm&U-HDz3P47ZI?Qw=cGN-KIsMN$I_s5R5~GzN*_yiB`R6v zQhA}=B!}f~@=kfL+%LZ@zb5}yJ}IA)FUVJAD$n;V@~!k8^-cKh`HK8={2u>m|0aLJ z|C0YF{-66_^&j)U<$u?I!++CnRZ5k4ic_gpYL%r*P+6fYZ&6y6n6h0_l^-gvC^_X% z%4Oy6$^*q7kOJ!i?SV}JEwC%FFYt2UwZNN!w*nUeHv^vrii5R5G1wHuFWlUJ0qG8W ADgXcg