Some dialog boxes
contain custom navigation that goes beyond
what
the function
provides.
For example,
property sheets
use Ctrl+Tab and Ctrl+Shift+Tab to change pages within
the property sheet.
Remember
the core of the dialog loop:
(Or
the modified version we created in part 7.)
To add custom navigation, just stick it in before
callin...
Last time, we solved the problem with
the function
by posting a harmless message.
Today, we're going to solve the problem in an entirely
different way.
The idea here is to make sure the modal message loop
regains control, even if all that happened were incoming
sent messages, so that it can detect that the
flag is set and break out of the mod...
Last time, I left you with a homework exercise:
Find the subtle bug in the interaction between
and the modal message loop.
The subtlety is that
sets some flags but does nothing to force the message loop
to notice that the flag was actually set. Recall that
the function
does not return until a posted message arrives in the queue.
If incomin...
Let's apply what we learned from last time and convert a modeless dialog box into a modal one. As always, start with the scratch program and make the following additions:
Not a very exciting program, I grant you that. It just displays a dialog box and returns a value that depends on which button you pressed. The function uses the function t...
The dialog loop is actually quite simple. At its core,
it's just
If you want something fancier in your dialog loop,
you can take the loop above and tinker with it.
But let's start from the beginning.
The work happens in DialogBoxIndirectParam.
(You should already know by now how to convert all
the other DialogBoxXxx functions into DialogBoxInd...
This is actually a lot less work than creating the frame,
believe it or not.
For each control in the template, the corresponding child
window is created. The control's sizes and position is
specified in the template in DLUs, so of course they need
to be converted to pixels.
The class name and caption also come from the template.
There are al...
The dialog template describes what the dialog box should look like,
so the dialog manager walks the template and follows the
instructions therein. It's pretty straightforward; there isn't
much room for decision-making. You just do what the template says.
For simplicity, I'm going to assume that the dialog template
is an
extended dialog template....
I think a lot of confusion about the dialog manager
stems from not really understanding how it works.
It's really not that bad. I'll start by describing how
dialog boxes are created over the next few articles,
then move on to the dialog message loop, and wrap up
with some topics regarding navigation.
There will be nine parts in all.
The first maj...
As a mental exercise, let's combine two mind-numbing facts about
pointers to member functions,
namely that
all pointers to virtual functions look the same
and that
pointers to member functions are very strange animals.
The result may make your head explode.
Consider:
Here, the variable consists of
a code pointer and an adjustor.
The code p...