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== ) ); }