When you call a function, your code doesn't resume execution until that function returns

Raymond Chen

Raymond

Consider this code fragment:

void foo()
{
  while (true) {
   bar();
   baz();
  }
}

When foo calls bar(),
and bar has not yet returned, does foo
continue executing?
Does baz get called before bar returns?

No, it does not.

The basic structure of the C/C++ language imposes sequential execution.
Control does not return to the foo function
until bar returns control,
either by reaching the end of the function
or by an explicit return.

Commenter Norman Diamond

asks a bunch of questions
, but
they’re all mooted by the first:

I can’t find any of the answers in MSDN,
and even an answer to one doesn’t make answers to others obvious.

Unless failures occur,
the DialogBox function doesn’t return
until the new dialog’s DialogProc calls EndDialog.
It starts its own message loop.
Dkring this time the hwndParent (i.e. owner not parent) window is disabled.
However, disabling doesn’t prevent delivery of some kinds of messages
to the parent window’s WindowProc or DialogProc,
and doesn’t prevent delivery of any messages
to the application’s main message loop, right?
So aren’t there two or more message loops running in parallel?

As long as the function DialogBox has not yet returned,
control does not return to the application’s main message loop,
since it is the one which called DialogBox (most likely
indirectly).

MSDN doesn’t explain this because
it is a fundamental property of the C and C++ languages and is not
peculiar to Win32.

Disabling a window does not prevent it from receiving messages
in general; it only disables mouse and keyboard input.
This is called out in the opening sentence of the EnableWindow
function documentation:

The EnableWindow function enables or disables mouse
and keyboard input to the specified window or control.

Messages unrelated to mouse and keyboard input are delivered normally.
And they aren’t dispatched by the application’s main message loop
because, as we saw above, the main message loop isn’t executing!

I would recommend reviewing a book that covers
the basics of Win32 GUI programming, since there appear to be some
fundamental misunderstandings.
Since I try to target an advanced audience, I generally assume
that everybody understands the basics and is ready to move on
to the intermediate and advanced topics.
If you have trouble with the basics, you should work on that part first.

0 comments

Comments are closed.