Holy cow, I wrote a book!
When you call the ChangeDisplaySettings function,
you can pass the CDS_FULLSCREEN flag to indicate
that the change is temporary.
But if you don't also save the changes in the registry,
how can they be permanent?
What does temporary mean?
A temporary display change is one that your program has entered
because it has gone into a fullscreen mode,
a change which it will
undo when it releases control of the screen to another program.
For example, a fullscreen video may use a temporary display change
to display a 320 × 200 video.
The change isn't permanent, since the video player will
certainly return the video resolution to its previous setting
when the video ends or when the user switches to another program.
The window manager and Explorer behave
differently in response to temporary as opposed
to permanent display changes.
If a display change is permanent,
the window manager will reposition windows and Explorer will
reposition desktop icons so that they all fit
on the (new) screen.
If they didn't do this, then windows and icons near the right edge
or bottom edge would become inaccessible.
Conversely, if you say that the change is temporary,
then the window manager and Explorer won't reposition anything
because you said that you'll set things back when you're done.
If you set the CDS_FULLSCREEN flag incorrectly,
you typically see one of two results.
If you set the temporary flag when you shouldn't,
then you'll find that icons have disappeared off-screen
and have become inaccessible.
That's because you said, "Oh, don't worry about this screen
I'll set it back before you even realize it."
If you fail to set the temporary flag when you should have,
then you'll find that all your open windows and your desktop icons
have been squished into the corner of the screen.
And that's because you said,
"The user is going to be working in screen resolution to 320 × 200,
so you'd better make sure everything is ready for it!"
Moral of the story:
If you're going to change the display settings,
make sure you correctly indicate whether you're doing this
temporarily or permanently.
The name for the flag CDS_FULLSCREEN
acts as a strong hint for telling you when you need to pass it.
Pre-emptive snarky comment:
"This blog entry is proof that Microsoft documentation sucks.
If the documentation were any good, this article would not have
Well, I'm sorry for trying to help.
If you prefer, I'll only write about things that are