Holy cow, I wrote a book!
why programs run more slowly when the system is running with
Well, for one thing, of course, when you have more than one monitor,
there's more stuff on the screen for the system to keep track of.
It's the same reason that programs run more slowly on a large monitor
than on a small monitor.
And if there's only one monitor,
then functions like MonitorFromPoint become
trivial if the flag is something like MONITOR_DEFAULTTONEAREST,
because when there's only one monitor,
answering questions like "What monitor is closest to this point"?
becomes very easy.
If your two monitors are not the same dimensions,
then the union of the two monitors will not be rectangular,
which makes clipping against the union of all monitors
But I suspect the big penalty for multiple monitors
kicks in if you make the mistake of setting your monitors
to different color formats,
for example, if you set one monitor to 565 format
and set another to 24bpp.
If the two monitors do not use the same color format,
then programs will be forced to use DIBs instead of DDBs
for screen bitmaps,
in case a window is moved to a window with a different
color format (or worse, is positioned so it straddles
two monitors with different color formats).
In principle, programs need only use the "worst-case" DIB;
for example, if one monitor is 555 and the other is 565,
then a 565 DIB will suffice.
In practice, however, most programs just fall back to a
24bpp or 32bpp DIB when faced with monitors with different
(You query whether all monitors have the same color format
by calling GetSystemMetrics(SM_SAMEDISPLAYFORMAT).)
Since a format conversion takes place when a DIB is blitted
to a device with a different color format,
forcing a program to retain its bitmaps as DIBs means that
for at least one of the monitors (and probably both),
you're going to undergo a format conversion when that DIB
is drawn to the screen.
There are also
a few miscellaneous optimizations which are disabled
when not all your monitors use the same color format
because the cost of using DIBs outweighs the savings
from the optimization.
So if you haven't already,
go into your display settings and check that you set all
your monitors to the same color depth.
If you don't do this,
then a large class of graphics optimizations is lost.