When code uses the PostThreadMessage() Win32 function, the MFC message
handlers are not called.
When you call PostThreadMessage(), the message is placed in the thread's
message queue. However, because messages posted this way are not associated
with a window, MFC will not dispatch them to message or command handlers.
In order to handle these messages, override the PreTranslateMessage()
function of your CWinApp-derived class, and handle the messages manually.
The following code demonstrates how to call PostThreadMessage() in the
InitInstance() of the CWinApp-derived class using a single-threaded
application. The principle is the same for secondary threads except that
the code shown here would be put in your alternate CWinThread-derived
Visual C++ 4.2 does support handling messages posted to threads. For more
information, see ON_THREAD_MESSAGE in the Visual C++ 4.2 documentation.NOTE
: MFC worker threads do not have a message loop/pump associated with
them so you must use a user-interface thread.
/* Compile options needed:
standard MFC project generated by AppWizard */
BOOL CThreadMsgApp::PreTranslateMessage(MSG* pMsg)
// Is it the Message you want?
// You can use a switch statement but because this is
// only looking for one message, you can use the if/else
if (pMsg->message == WM_USER+2268)
// Call the function to handle this message
// Tell MFC no more processing is needed
// Call MFC to have it continue processing the message
wParam = MAKEWPARAM(0,0); // We can put whatever we
lParam = MAKELPARAM(0,0); // want in wParam & lParam
// Send the user-defined Thread Message
// m_nThreadID is a member of CWinThread that holds the thread ID
PostThreadMessage(m_nThreadID, WM_USER+2268, wParam, lParam);
void CThreadMsgApp::OnReceivedCommand(WPARAM wParam, LPARAM lParam)
// You can do whatever you want in here, this is simply
// sending output to the debug window
For more information on the CWinThread object, please see the following:
MFC Encyclopedia, Multithreading: Creating User-Interface Threads.
Article ID: 142415 - Last Review: December 9, 2003 - Revision: 2.0
- Microsoft Visual C++ 1.0 Professional Edition
- Microsoft Visual C++ 2.0 Professional Edition
- Microsoft Visual C++ 2.1
- Microsoft Visual C++ 2.2
- Microsoft Visual C++ 4.0 Standard Edition
- Microsoft Visual C++ 4.1 Subscription
Retired KB Content Disclaimer
This article was written about products for which Microsoft no longer offers support. Therefore, this article is offered "as is" and will no longer be updated.