2009/4/22 Jan Dubois <jand@...>:
> On Wed, 22 Apr 2009, Rob May wrote:
>> I think I vote for it too, although I suspect that it'll cause some
>> (minor) layout problems for some people, as I'm not sure that all the
>> control decorations are the same on styled/non-styled controls.
> There are some layout differences, so it will be visible in some apps.
I've had a chance to play further, and at least on XP once the
perl.exe manifest required V6 of the common controls I can find no way
to get back to using the V5 controls in an extension. Theoretically
is should be possible to build perl with ISOLATION_AWARE_ENABLED
defined, but then all extension DLL will use V5 of the common
controls, somewhat defeating the purpose of asking for them in
manifest in the first place.
I don't think this is a reason not to have the perl.exe manifest
request v6 common controls, but thought I should mention this as a
>> Last time I had some time to play (sadly I don't get much of that
>> these days) I was looking at adding a manifest to GUI.dll - it's
>> possible to add a manifest to a DLL and get the version 6 controls for
>> any windows created by that DLL, even if the main APP doesn't have a
>> manifest; however this depends on some stuff that's in the MS headers,
>> and doesn't work with the mingw headers (and hence won't work with
>> cygwin). I have a patch somewhere (but not with me at the moment).
The change required here is very simple. Define the C Pre-processor
symbol ISOLATION_AWARE_ENABLED for the whole project, and add a v6
manifest to the resource section with resource id 2
(ISOLATION_AWARE_MANIFEST_ID); build with Visual C and the
headers/system do eveything else for you. As stated above this
doesn't work with mingw/gcc.
As I was getting fed up with adding/removing a manifest file from the
perl bin directory to test apps with and without manifests, I've
written a small module that can turn on visual styles
(Win32::VisualStyles). Code can be download from
http://rob.themayfamily.me.uk/win32-gui/win32-visualstyles - I'd
appreciate feedback on the interface and whether it works for you. If
I get positive feedback I'll finish tidying up the documentation and
release it as a CPAN module. I've not put it in the Win32::GUI
namespace, as I think it has wider applicability.
The code creates a V6 activation context (what a manifest gets turned
into) and activates it. It also provides access to the Win32 API
calls S/GetThemeAppProperties, IsThemeActive, IsAppThemed, and also
provides a control_styles_active() API (as the Win32 API calls don't
do exactly what their names suggest they might).
It should work back to perl 5.6, and should have no detrimental
effects on platforms that don't support styles (pre-XP); If your perl
already has a V6 manifest it spots this and doesn't change the
Comments, as always, welcome.
> Interesting. I don't quite understand how this would work though, as
> the names of the controls are registered globally, so I don't see how
> you could mix old and new style controls inside a single process.
>> There are also some API calls that can be used to turn styling on and
>> off on a per-app and per-window basis, once you've got the v6 controls
>> loaded ..... I haven't yet come up with a suitable strategy for
>> introducing this thought; perhaps adding a v6 manifest to perl.exe
>> will force me to find time to investigate further?
> Could you find a link to some documentation about this so I can understand
> how this is supposed to work?
> Note that we'll also have to check with e.g. the wxPerl community, and
> probably others to hear what they think about this.