Modern Windows GUI visual styles

Eric Suen eric.suen.tech at gmail.com
Wed Sep 9 19:21:34 PDT 2009


Hi,

Take a look Windows API:  CreateActCtx, ActivateActCtx, DeactivateActCtx and 
ReleaseActCtx and the struct ACTCTX

You still need a manifest file, but that file can generate by program, and 
you can turn on/off the XP theme.

"ACTCTX.lpSource  Null-terminated string specifying the path of the manifest 
file or PE image to be used to create the activation context. If this path 
refers to an EXE or DLL file, the lpResourceName member is required."

The attachment is the cpp code I wrote for Java...

Regards,

Eric Suen

> Recently I spent a few hours to find a way to enable a new styles of 
> Windows XP controls from the code (without manual created external 
> manifest files, resource files, ...). The only solution I found in DFL 
> library and it looks quite complicated.
>
> Maybe should create that function at the level of the compiler or linker?


begin 666 spket.cpp
M(V1E9FEN92!?5TE.,S)?5TE.3E0@,'@P-3$P#0H-"B-I;F-L=61E(#QW:6YD
M;W=S+F@^#0HC:6YC;'5D92 \<VAL=V%P:2YH/@T*#0HC:6YC;'5D92 B<W!K
M971?:FYI+F at B#0HC:6YC;'5D92 B<F5S;W5R8V4N:"(-"@T*<W1A=&EC($A)
M3E-404Y#12!S<&ME=%]H86YD;&4@/2!.54Q,.PT*#0IE>'1E<FX@(D,B('L-
M"@T*(V1E9FEN92!34$M%5%]&54,H<F,L(&9U;F,I($I.24584$]25"!R8R!*
M3DE#04Q,($IA=F%?8V]M7W-P:V5T7VEN=&5R;F%L7W=I;C,R7U1H96UE(R-F
M=6YC#0H-"B-D969I;F4 at 0T].5D525"AA='EP92P at 8V%R<F%Y+"!J87)R87DI
M(%P-"B @871Y<&4 at 8V%R<F%Y(#T at 3E5,3#L at 7 T*("!I9B H:F%R<F%Y*2!I
M9B H*&-A<G)A>2 ]("AA='EP92D at 96YV+3Y'9710<FEM:71I=F5!<G)A>4-R
M:71I8V%L*&IA<G)A>2P at 2DY)7T9!3%-%*2D@/3T at 3E5,3"D at 9V]T;R!D;VYE
M.PT*( T*(V1E9FEN92!214Q%05-%*&IA<G)A>2P at 8V%R<F%Y*2!I9B H:F%R
M<F%Y("8F(&-A<G)A>2D at 96YV+3Y296QE87-E4')I;6ET:79E07)R87E#<FET
M:6-A;"AJ87)R87DL(&-A<G)A>2P at 2DY)7T%"3U)4*3L-"B-D969I;F4 at 4D5,
M14%315]#3U!9*&IA<G)A>2P at 8V%R<F%Y*2!I9B H:F%R<F%Y("8F(&-A<G)A
M>2D at 96YV+3Y296QE87-E4')I;6ET:79E07)R87E#<FET:6-A;"AJ87)R87DL
M(&-A<G)A>2P@,"D[#0H-"G1Y<&5D968 at 2$%.1$Q%("A*3DE#04Q,("I#<F5A
M=&5!8W1#='A74')O8RDH4$%#5$-46%<I.PT*='EP961E9B!(04Y$3$4@*$I.
M24-!3$P@*D-R96%T94%C=$-T>$%0<F]C*2A004-40U1802D[#0IT>7!E9&5F
M($)/3TP@*$I.24-!3$P@*D%C=&EV871E06-T0W1X4')O8RDH2$%.1$Q%+"!5
M3$].1U]05%(J*3L-"G1Y<&5D968 at 0D]/3" H2DY)0T%,3" J1&5A8W1I=F%T
M94%C=$-T>%!R;V,I*$173U)$+"!53$].1U]05%(I.PT*='EP961E9B!V;VED
M("A*3DE#04Q,("I296QE87-E06-T0W1X4')O8RDH2$%.1$Q%*3L-"@T*4U!+
M151?1E5#*&IB;V]L96%N+"!?86-T:79E5&AE;6EN9RD-"B @*$I.245N=B J
M96YV+"!J8VQA<W,L(&IB;V]L96%N(&ES56YI8V]D92P@:FEN=$%R<F%Y(&-T
M>$%R<F%Y*0T*>PT*"4A)3E-404Y#12!T:&5M94QI8B ]($QO861,:6)R87)Y
M*")5>%1H96UE(BD[#0H):68@*'1H96UE3&EB(#T]($Y53$PI#0H)"7)E='5R
M;B!*3DE?1D%,4T4[#0H)"0T*"49R965,:6)R87)Y*'1H96UE3&EB*3L-"@D-
M"@DO+TES5&AE;65!8W1I=F4@)B8 at 27-!<'!4:&5M960@;F]T('=O<FL at 87,@
M97AP96-T960-"@E"3T],(&ES07!P5&AE;65D(#T at 1D%,4T4[#0H)2$E.4U1!
M3D-%(&-O;6-T3&EB(#T at 3&]A9$QI8G)A<GDH(D-O;6-T;#,R(BD[#0H):68@
M*&-O;6-T3&EB("$]($Y53$PI('L-"@D)1$Q,1T545D524TE/3E!23T, at 9&QL
M4')O8R ]("A$3$Q'151615)324].4%)/0RD at 1V5T4')O8T%D9')E<W,H8V]M
M8W1,:6(L(")$;&Q'971697)S:6]N(BD[#0H)"6EF("AD;&Q0<F]C("$]($Y5
M3$PI('L-"@D)"41,3%9%4E-)3TY)3D9/('9E<DEN9F\[#0H)"0E:97)O365M
M;W)Y*"9V97));F9O+"!S:7IE;V8H=F5R26YF;RDI.PT*"0D)=F5R26YF;RYC
M8E-I>F4@/2!S:7IE;V8H=F5R26YF;RD[#0H)"0E(4D5354Q4(&AR(#T at 9&QL
M4')O8R at F=F5R26YF;RD[#0H)"0EI9B H4U5#0T5%1$5$*&AR*2 F)B!V97))
M;F9O+F1W36%J;W)697)S:6]N(#X](#8I('L-"@D)"0EI<T%P<%1H96UE9" ]
M(%12544[#0H)"0E]#0H)"7T-"@D)1G)E94QI8G)A<GDH8V]M8W1,:6(I.PT*
M"7T-"@D-"@E"3T],(')C(#T at 1D%,4T4[#0H):68@*&ES07!P5&AE;65D(#T]
M($9!3%-%*2![#0H)"4173U)$(&Y3:7IE(#T@,#L-"@D)2$%.1$Q%*B!H06-T
M0W1X(#T at 3E5,3#L-"@D)54Q/3D=?4%12*B!U;'!!8W1I=F%T:6]N0V]O:VEE
M(#T at 3E5,3#L-"@D)#0H)"4A)3E-404Y#12!K97)N96P@/2!,;V%D3&EB<F%R
M>2 at B2V5R;F5L,S(B*3L-"@D):68@*&ME<FYE;" ]/2!.54Q,*0T*"0D)<F5T
M=7)N($I.25]&04Q313L-"@D)"0T*"0EH06-T0W1X(#T@;F5W($A!3D1,13L-
M"@D)*FA!8W1#='@@/2!)3E9!3$E$7TA!3D1,15]604Q513L-"@D)=6QP06-T
M:79A=&EO;D-O;VMI92 ](&YE=R!53$].1U]05%([#0H)"0T*"0E!8W1I=F%T
M94%C=$-T>%!R;V, at 86-T:79A=&5!8W1#='A0<F]C(#T@*$%C=&EV871E06-T
M0W1X4')O8RD at 1V5T4')O8T%D9')E<W,H:V5R;F5L+" B06-T:79A=&5!8W1#
M='@B*3L-"@D):68@*&%C=&EV871E06-T0W1X4')O8R A/2!.54Q,*2![#0H)
M"0EI9B H:7-5;FEC;V1E*2![#0H)"0D)0W)E871E06-T0W1X5U!R;V, at 8W)E
M871E06-T0W1X4')O8R ]("A#<F5A=&5!8W1#='A74')O8RD at 1V5T4')O8T%D
M9')E<W,H:V5R;F5L+" B0W)E871E06-T0W1X5R(I.PT*"0D)"6EF("AC<F5A
M=&5!8W1#='A0<F]C("$]($Y53$PI('L-"@D)"0D)04-40U185R!A8W1C='@[
M#0H)"0D)"4173U)$(&QE;F=T:" ]($U!6%]0051(.PT*"0D)"0E70TA!4B!F
M:6QE;F%M95M-05A?4$%42%T[#0H)"0D)"4Q05U-44B!L<$9I;&5N86UE(#T@
M9FEL96YA;64[#0H)"0D)"0T*"0D)"0ED;R![#0H)"0D)"0EN4VEZ92 ]($=E
M=$UO9'5L949I;&5.86UE5RAS<&ME=%]H86YD;&4L(&QP1FEL96YA;64L(&QE
M;F=T:"D[#0H)"0D)"0EI9B H;E-I>F4@/"!L96YG=&@I#0H)"0D)"0D)8G)E
M86L[#0H)"0D)"0D-"@D)"0D)"6Y3:7IE(#T@,#L-"@D)"0D)"6EF("AL<$9I
M;&5N86UE("$](&9I;&5N86UE*0T*"0D)"0D)"61E;&5T95M=(&QP1FEL96YA
M;64[#0H)"0D)"0D)#0H)"0D)"0EL96YG=&@@*ST at 34%87U!!5$@[#0H)"0D)
M"0EL<$9I;&5N86UE(#T@;F5W(%=#2$%26VQE;F=T:%T[#0H)"0D)"0EI9B H
M;'!&:6QE;F%M92 ]/2!.54Q,*0T*"0D)"0D)"6)R96%K.PT*"0D)"0E]('=H
M:6QE("AT<G5E*3L-"@D)"0D)#0H)"0D)"6EF("AN4VEZ92 ^(# I('L-"@D)
M"0D)"6UE;7-E="@F86-T8W1X+" P+"!S:7IE;V8H86-T8W1X*2D[#0H)"0D)
M"0EA8W1C='@N8V)3:7IE(#T@<VEZ96]F*&%C=&-T>"D[#0H)"0D)"0EA8W1C
M='@N;'!3;W5R8V4@/2!L<$9I;&5N86UE.PT*"0D)"0D)86-T8W1X+F1W1FQA
M9W,@/2!!0U1#5%A?1DQ!1U]215-/55)#15].04U%7U9!3$E$.PT*"0D)"0D)
M86-T8W1X+FQP4F5S;W5R8V5.86UE(#T at 34%+14E.5%)%4T]54D-%5RA-04Y)
M1D535%])1"D[#0H)"0D)"0DJ:$%C=$-T>" ](&-R96%T94%C=$-T>%!R;V,H
M)F%C=&-T>"D[#0H)"0D)"7T-"@D)"0D):68@*&QP1FEL96YA;64@(3T at 3E5,
M3" F)B!L<$9I;&5N86UE("$](&9I;&5N86UE*0T*"0D)"0D)9&5L971E6UT@
M;'!&:6QE;F%M93L-"@D)"0E]#0H)"0E](&5L<V4@>PT*"0D)"4-R96%T94%C
M=$-T>$%0<F]C(&-R96%T94%C=$-T>%!R;V,@/2 H0W)E871E06-T0W1X05!R
M;V,I($=E=%!R;V-!9&1R97-S*&ME<FYE;"P@(D-R96%T94%C=$-T>$$B*3L-
M"@D)"0EI9B H8W)E871E06-T0W1X4')O8R A/2!.54Q,*2![#0H)"0D)"4%#
M5$-46$$@86-T8W1X.PT*"0D)"0E$5T]21"!L96YG=&@@/2!-05A?4$%42#L-
M"@D)"0D)8VAA<B!F:6QE;F%M95M-05A?4$%42%T[#0H)"0D)"6-H87(J(&QP
M1FEL96YA;64@/2!F:6QE;F%M93L-"@D)"0D)#0H)"0D)"61O('L-"@D)"0D)
M"6Y3:7IE(#T at 1V5T36]D=6QE1FEL94YA;65!*'-P:V5T7VAA;F1L92P@;'!&
M:6QE;F%M92P@;&5N9W1H*3L-"@D)"0D)"6EF("AN4VEZ92 \(&QE;F=T:"D-
M"@D)"0D)"0EB<F5A:SL-"@D)"0D)"0T*"0D)"0D);E-I>F4@/2 P.PT*"0D)
M"0D):68@*&QP1FEL96YA;64@(3T at 9FEL96YA;64I#0H)"0D)"0D)9&5L971E
M6UT@;'!&:6QE;F%M93L-"@D)"0D)"0D-"@D)"0D)"6QE;F=T:" K/2!-05A?
M4$%42#L-"@D)"0D)"6QP1FEL96YA;64@/2!N97<@8VAA<EML96YG=&A=.PT*
M"0D)"0D):68@*&QP1FEL96YA;64@/3T at 3E5,3"D-"@D)"0D)"0EB<F5A:SL-
M"@D)"0D)?2!W:&EL92 H=')U92D[#0H)"0D)"0T*"0D)"0EI9B H;E-I>F4@
M/B P*2![#0H)"0D)"0EM96US970H)F%C=&-T>"P@,"P@<VEZ96]F*&%C=&-T
M>"DI.PT*"0D)"0D)86-T8W1X+F-B4VEZ92 ]('-I>F5O9BAA8W1C='@I.PT*
M"0D)"0D)86-T8W1X+FQP4V]U<F-E(#T@;'!&:6QE;F%M93L-"@D)"0D)"6%C
M=&-T>"YD=T9L86=S(#T at 04-40U187T9,04=?4D533U520T5?3D%-15]604Q)
M1#L-"@D)"0D)"6%C=&-T>"YL<%)E<V]U<F-E3F%M92 ]($U!2T5)3E1215-/
M55)#14$H34%.249%4U1?240I.PT*"0D)"0D)*FA!8W1#='@@/2!C<F5A=&5!
M8W1#='A0<F]C*"9A8W1C='@I.PT*"0D)"0E]#0H)"0D)"6EF("AL<$9I;&5N
M86UE("$]($Y53$P@)B8@;'!&:6QE;F%M92 A/2!F:6QE;F%M92D-"@D)"0D)
M"61E;&5T95M=(&QP1FEL96YA;64[#0H)"0D)?0T*"0D)?0T*"0D-"@D)"6EF
M("@J:$%C=$-T>" A/2!)3E9!3$E$7TA!3D1,15]604Q512D@>PT*"0D)"7)C
M(#T at 86-T:79A=&5!8W1#='A0<F]C*"IH06-T0W1X+"!U;'!!8W1I=F%T:6]N
M0V]O:VEE*3L-"@D)"0EI9B H<F,@/3T at 5%)512D@>PT*"0D)"0E#3TY615)4
M*&II;G0J+"!C='@L(&-T>$%R<F%Y*0T*"0D)"0D-"@D)"0D)8W1X6S!=(#T@
M<F5I;G1E<G!R971?8V%S=#QJ:6YT/BAH06-T0W1X*3L-"@D)"0D)8W1X6S%=
M(#T@<F5I;G1E<G!R971?8V%S=#QJ:6YT/BAU;'!!8W1I=F%T:6]N0V]O:VEE
M*3L-"@D)"0D)#0H)"0D)9&]N93H-"@D)"0D)4D5,14%315]#3U!9*&-T>$%R
M<F%Y+"!C='@I#0H)"0D)?2!E;'-E('L at +R\@<F5L96%S90T*"0D)"0E296QE
M87-E06-T0W1X4')O8R!R96QE87-E06-T0W1X4')O8R ]("A296QE87-E06-T
M0W1X4')O8RD at 1V5T4')O8T%D9')E<W,H:V5R;F5L+" B4F5L96%S94%C=$-T
M>"(I.PT*"0D)"0EI9B H<F5L96%S94%C=$-T>%!R;V,@(3T at 3E5,3"D-"@D)
M"0D)"7)E;&5A<V5!8W1#='A0<F]C*"IH06-T0W1X*3L-"@D)"0E]#0H)"0E]
M#0H)"7T-"@D)#0H)"49R965,:6)R87)Y*&ME<FYE;"D[#0H)?2!E;'-E('L-
M"@D)<F,@/2!44E5%.PT*"7T-"@D-"@ER971U<FX@*')C(#\@2DY)7U12544@
M.B!*3DE?1D%,4T4I.PT*?0T*#0I34$M%5%]&54,H:F)O;VQE86XL(%]D96%C
M=&EV951H96UI;F<I#0H@("A*3DE%;G8@*BP@:F-L87-S+"!J:6YT(&AA;F1L
M92P@:FEN="!C;V]K:64I#0I[#0H):68@*&AA;F1L92D@>PT*"0E(24Y35$%.
M0T4@:V5R;F5L(#T at 3&]A9$QI8G)A<GDH(DME<FYE;#,R(BD[#0H)"6EF("AK
M97)N96P@/3T at 3E5,3"D-"@D)"7)E='5R;B!*3DE?1D%,4T4[#0H)"0D-"@D)
M2$%.1$Q%*B!H06-T0W1X(#T@<F5I;G1E<G!R971?8V%S=#Q(04Y$3$4J/BAH
M86YD;&4I.PT*"0E53$].1U]05%(J('5L<$%C=&EV871I;VY#;V]K:64@/2!R
M96EN=&5R<')E=%]C87-T/%5,3TY'7U!44BH^*&-O;VMI92D[#0H)"41E86-T
M:79A=&5!8W1#='A0<F]C(&1E86-T:79A=&5!8W1#='A0<F]C(#T@*$1E86-T
M:79A=&5!8W1#='A0<F]C*2!'9710<F]C061D<F5S<RAK97)N96PL(")$96%C
M=&EV871E06-T0W1X(BD[#0H)"6EF("AD96%C=&EV871E06-T0W1X4')O8R A
M/2!.54Q,*2![#0H)"0ED96%C=&EV871E06-T0W1X4')O8R at P+" J=6QP06-T
M:79A=&EO;D-O;VMI92D[#0H)"0D-"@D)"5)E;&5A<V5!8W1#='A0<F]C(')E
M;&5A<V5!8W1#='A0<F]C(#T@*%)E;&5A<V5!8W1#='A0<F]C*2!'9710<F]C
M061D<F5S<RAK97)N96PL(")296QE87-E06-T0W1X(BD[#0H)"0EI9B H<F5L
M96%S94%C=$-T>%!R;V,@(3T at 3E5,3"D-"@D)"0ER96QE87-E06-T0W1X4')O
M8R at J:$%C=$-T>"D[#0H)"7T-"@D)#0H)"49R965,:6)R87)Y*&ME<FYE;"D[
M#0H)"0T*"0ED96QE=&4@:$%C=$-T>#L-"@D)9&5L971E('5L<$%C=&EV871I
M;VY#;V]K:64[#0H)?0T*"0T*"7)E='5R;B!*3DE?5%)513L-"GT-"@T*0D]/
M3"!!4$E%3E1262!$;&Q-86EN("A(24Y35$%.0T4@:$EN<W0L#0H@(" @(" @
M(" @(" @(" @(" @(" @($173U)$(')E87-O;BP-"B @(" @(" @(" @(" @
M(" @(" @(" @3%!63TE$(')E<V5R=F5D*0T*>PT*"7-P:V5T7VAA;F1L92 ]
M(&A);G-T.PT*"0T*"7)E='5R;B!44E5%.PT*?0T*#0HO*@T*<W1A=&EC(&)O
M;VP at 27-4:&5M95-U<'!O<G0H*0T*>PT*"6EF("AT:&5M95]S=&%T=7,@/3T@
M,"D@>PT*"0ET:&5M95]S=&%T=7,@/2 Q.PT*"0E(24Y35$%.0T4@=&AE;64@
M/2!,;V%D3&EB<F%R>2 at B57A4:&5M92(I.PT*"0EI9B H=&AE;64@(3T at 3E5,
M3"D@>PT*"0D)=&AE;65?<W1A='5S(#T@,CL-"@D)"49R965,:6)R87)Y*'1H
M96UE*3L-"@D)?0T*"7T-"@D-"@ER971U<FX@*'1H96UE7W-T871U<R ]/2 R
M*3L-"GT-"@T*<W1A=&EC(&)O;VP at 27-!<'!4:&5M960H*0T*>PT*"6EF("@A
M27-4:&5M95-U<'!O<G0H*2D-"@D)<F5T=7)N(&9A;'-E.PT*"0D-"@E"3T],
M(&ES07!P5&AE;65D(#T at 1D%,4T4[#0H)2$E.4U1!3D-%(&-O;6-T3&EB(#T@
M3&]A9$QI8G)A<GDH(D-O;6-T;#,R(BD[#0H):68@*&-O;6-T3&EB("$]($Y5
M3$PI('L-"@D)1$Q,1T545D524TE/3E!23T, at 9&QL4')O8R ]("A$3$Q'1516
M15)324].4%)/0RD at 1V5T4')O8T%D9')E<W,H8V]M8W1,:6(L(")$;&Q'9716
M97)S:6]N(BD[#0H)"6EF("AD;&Q0<F]C("$]($Y53$PI('L-"@D)"41,3%9%
M4E-)3TY)3D9/('9E<DEN9F\[#0H)"0E:97)O365M;W)Y*"9V97));F9O+"!S
M:7IE;V8H=F5R26YF;RDI.PT*"0D)=F5R26YF;RYC8E-I>F4@/2!S:7IE;V8H
M=F5R26YF;RD[#0H)"0E(4D5354Q4(&AR(#T at 9&QL4')O8R at F=F5R26YF;RD[
M#0H)"0EI9B H4U5#0T5%1$5$*&AR*2 F)B!V97));F9O+F1W36%J;W)697)S
M:6]N(#X](#8I('L-"@D)"0E(24Y35$%.0T4@=&AE;65,:6(@/2!,;V%D3&EB
M<F%R>2 at B57A4:&5M92(I.PT*"0D)"6EF("AT:&5M94QI8B A/2!.54Q,*2![
M#0H)"0D)"4ES5&AE;65!8W1I=F50<F]C(&%C=%!R;V,@/2 H27-4:&5M94%C
M=&EV95!R;V,I($=E=%!R;V-!9&1R97-S*'1H96UE3&EB+" B27-4:&5M94%C
M=&EV92(I.PT*"0D)"0EI9B H86-T4')O8R F)B!A8W10<F]C*"D@/3T at 5%)5
M12D@>PT*"0D)"0D)27-!<'!4:&5M9610<F]C('1H96UE9%!R;V,@/2 H27-!
M<'!4:&5M9610<F]C*2!'9710<F]C061D<F5S<RAT:&5M94QI8BP@(DES07!P
M5&AE;65D(BD[#0H)"0D)"0EI9B H=&AE;65D4')O8R A/2!.54Q,*0T*"0D)
M"0D)"6ES07!P5&AE;65D(#T@=&AE;65D4')O8R at I.PT*"0D)"0E]#0H)"0D-
M"@D)"0D)1G)E94QI8G)A<GDH=&AE;65,:6(I.PT*"0D)"7T-"@D)"7T-"@D)
M?0T*"0E&<F5E3&EB<F%R>2AC;VUC=$QI8BD[#0H)?0T*"7)E='5R;B H:7-!
M<'!4:&5M960@/3T at 5%)512 _('1R=64 at .B!F86QS92D[#0I]#0H-"G-T871I
M8R!B;V]L($5N86)L951H96UI;F<H8F]O;"!E;F%B;&4I#0I[#0H):68@*"%)
M<U1H96UE4W5P<&]R="@I*0T*"0ER971U<FX at 9F%L<V4[#0H)#0H)8F]O;"!R
M8R ](&9A;'-E.PT*"4A)3E-404Y#12!T:&5M94QI8B ]($QO861,:6)R87)Y
M*")5>%1H96UE(BD[#0H):68@*'1H96UE3&EB("$]($Y53$PI('L-"@D)16YA
M8FQE5&AE;6EN9U!R;V,@=&AE;6EN9U!R;V,@/2 H16YA8FQE5&AE;6EN9U!R
M;V,I($=E=%!R;V-!9&1R97-S*'1H96UE3&EB+" B16YA8FQE5&AE;6EN9R(I
M.PT*"0EI9B H=&AE;6EN9U!R;V,@(3T at 3E5,3"D-"@D)"7)C(#T@=&AE;6EN
M9U!R;V,H96YA8FQE(#\@5%)512 Z($9!3%-%*2 ]/2!37T]+.PT*"0D-"@D)
M1G)E94QI8G)A<GDH=&AE;65,:6(I.PT*"7T-"@D-"@ER971U<FX@<F,[#0I]
+#0HJ+PT*#0I]#0H`
`
end




More information about the Digitalmars-d mailing list