I've been experimenting with toolbars recently and hit a snag. I needed some
simple icons, so I extracted a few from Shell32.dll and imported them using
BitmapInline. The problem is that some of them look really ugly and I've
been banging my head for days trying to figure out exactly what the problem
is. Thanks to some patient listening (off-list) by Jez White, I've narrowed
my problem down to this:
* The icon looks fine in Explorer, so the export is OK;
* The icon also looks fine on a label, so the icon import is OK;
* When I then add the icon to an ImageList and display it on a
Treeview, it looks nasty;
* The same happens on a toolbar or listview, so it's not the control;
* The mask is working, as you can see if you unset the ILC_MASK bit on
creating the ImageList.
Here is an example. Does anybody have any clues why this isn't working
correctly?
#!perl -w
use strict;
use warnings;
use Win32::GUI;
use Win32::GUI::BitmapInline ();
sub ILC_COLOR24() {24};
sub ILC_MASK() {1};
my $mw = Win32::GUI::Window->new(
-title => "Icons",
-size => [120,180],
-pos => [200,200],
);
my $hIcon = CreateIcon();
$mw->AddLabel(
-background => 0xFFFFFF,
-icon => $hIcon,
-pos => [ 20, 20 ],
);
my $il = Win32::GUI::ImageList->new(16, 16, ILC_COLOR24|ILC_MASK, 1, 1);
$il->AddIcon($hIcon);
$mw->AddTreeView(
-name => "tv",
-size => [ 100, 100 ],
-pos => [ 0, 50 ],
-buttons => 1,
-rootlines => 1,
-imagelist => $il,
);
$mw->tv->InsertItem(-image => 0);
$mw->Show();
Win32::GUI::Dialog();
sub CreateIcon {
newIcon Win32::GUI::BitmapInline( q(
AAABAAEAEBAAAAEAAABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAA
AAAAAAAAAAABAAAACQAAABMAAAAYAAAAGAAAABcAAAATAAAACwAAAAMAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAACwAAAC8AAABTAAAAXwAAAF8AAABeAAAAVgAAAEUAAAAtAAAAHAAAABsA
AAAhAAAAIwAAACIAAAAcAAAAD2YgAjeKLQyvfCsQzIMvG9ODLxvTZiIIzT0TAboAAACZAAAAggAA
AGgAAABnAAAAcwAAAHcAAAB2AAAAZwAAAD23PQ/F3VIz//ljUP/9cFv/82xS/9JuQf/4ZVH/zEop
+y0yB9cSVxLbIXkh6i2ELeshfiHsEWsR5wMwA8AAAABntz0Po/ljUP/9emL//oxu/9yFVv/1zZv/
73BS//1qV/+Shzz/U69P/2euXP9hymH/VcNV/zi1OP8WehbpAAAAZqEyAyPhXT/x/Yhr/+F9Uf/6
x5T//9Og/+V3UP/4dFv/kZxQ/4bCgP/v9eD/Va9V/3PSc/9SwlL/GHUY2QAAAD0AAAANVhsBYqFM
Qu9CI1r/QzZ4/2BId/+7Wzj7k3o1/4Lagv+kxpf///Xs/7rPqP9jwWP/QaNB+QApAHcAAAAXAAAA
SQQEBO0DBg3/Dytx/xQ6oP8QMZf/Ag9c7gAlAK9AkEDLQ4iO/xB2uf8gfbv/GnFb+wAbALQAAABX
AAAAEwoKCsoaGhr/Ei9o/xpNs/8dV73/G0+1/w0yk/8ACCCtBT1elC2T8v8zmf//M5n//yuR7/8E
LETMAAAAeQAAACUVFRX/KCgo/xhCgf8mc9n/JnPZ/yZz2f8bXL3/AA8ssx1zsNA/pf//QKb//0Cm
//8+pP//H3u+9wAAAJEAAAA3ICAg8TU1Nf8lRWv/MJD2/zSa//8zlvr/IXPS/wAWMa0rhsbWTLL/
/02z//9Ns///Sa///zGX5v8AChCdAAAAPRQUFKJKSkr/QkJC/zZGZf8bRZD/ImLG/xVHff8AGDGG
MpDNzkyy8v9KsOz/V73//1C2//9Cper/ACc7pgAAADAAAAARLi4u8Glpaf+NjY3/pKSk/09PT/8R
HSbXAAAALwtsnZcph7n/UqTS/2Go0/9Rn9D/GHWk/wAAAFoAAAAZAAAAAAAAACEsLCyyXFxc/0tL
S+QhISGuAAAAJwAAAAgAYJAiKYOz8IvE5f+hz+r/V6TP/w1eia0AAAAgAAAABgAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABjlCEugKqETJG1iQBWgV8AAAANAAAABAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAH8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA
AAD/gQAA//8AAA==
) );
}