Holy cow, I wrote a book!
vertical strips are better,
why do toolbars use horizontal strips?
An early version of the
toolbar control first made its appearance in Windows 3.0,
and in those days, screen resolutions were low and toolbar buttons
Horizontal or vertical didn't really matter.
Ten bitmaps, each 16 × 16, at 4-bit color, comes out to one kilobyte,
much less than even a single 4KB page.
(And what's this paging nonsense anyway?
We're talking 16-bit Windows here!)
When this code was ported to 32-bit Windows for Windows 95, the existing
bitmap format was preserved in order to retain compatibility with
the 16-bit clients of the toolbar control.
Windows 95 included both the 16-bit and 32-bit versions of the
common controls library,
and they both built out of the same sources, with a little
#ifdef WIN32 action here and there
to deal with the places where 16/32 source code compatibility didn't
quite cover everything.
The early prototypes of the Windows 95 shell were written in this
mixed 16/32 model,
so that the same program could be compiled either as a 16-bit program
or a 32-bit program.
The 16-bit version was used in the earlier builds because the
32-bit kernel, GDI, and USER were all being developed in parallel.
The 16-bit version went out in the builds, and the 32-bit version
was used by the development team as a proving ground for Windows 95's
32-bit computing environment.
When the 32-bit environment was declared "good enough to self-host",
the switch was thrown, and the 32-bit shell went into the builds
instead of the 16-bit shell.
All this is a long way of saying that source code compatibility between
16-bit code and 32-bit code was very important, not only within
the Windows 95 shell team, but throughout the Windows 95
product, so that teams could port their 16-bit components to 32-bit
in a gradual and evolutionary manner.
If you were to introduce gratuitous subtle differences
(like the orientation of bitmap strips in toolbars),
you wouldn't make many friends.
They would port their program to 32-bit Windows and the toolbars
would all come out funny.
"But it works fine when I compile it as 16-bit.
Must be a bug in Windows 95.
I'll wait for the next build and try again."
With the introduction of version 4.70 of the common controls,
the internal structure of the toolbars changed,
and the bitmaps came to be
stored as imagelists rather than as raw bitmaps.
Imagelists store their images in a vertical strip, so once again
all is well with the world.
"Why not add a TB_ADDVERTICALBITMAP message?"
Well, for one thing, you're looking for inefficiency at the wrong level.
All that happens with the bitmap is that it gets stuffed into an
Nobody actually draws out of it,
so there's no point in optimize it for drawing.
And for another thing, you're looking for inefficiency at the wrong level.
If this even shows up on your performance traces, it means that
you're spending your time loading images into toolbars.
Isn't that a bigger cause for concern,
that you're spending so much of your time setting up toolbars?
Shouldn't you be spending your time doing productive work?
(Imagelists? Use your imagination.)