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==

) );

}

Reply via email to