When a modal dialog box is present, messages sent to the main window using PostMessage do not go through that window’s message loop. In fact, no message go through the main window’s message loop while the modal dialog is present. They do make it to the main window’s WndProc presumably through some message loop in the dialog handling.
Is this normal or am I doing something bizarre?
This is normal, the dialog box becomes modal by pumping its own message loop. This should not be a problem, DispatchMessage still delivers the message to the window procedure. Make sure you post with a valid window handle. Otherwise also the reason that PostThreadMessage() is a guaranteed fail whale if the thread creates any windows. Like MessageBox().