The IMPLEMENT_DYNAMIC and BEGIN_MESSAGE_MAP Macros are used to help define the Window Procedure, they do not actually setup the processing of the message queue.
Make sure that you call the
Run method of your thread that you have created to look for this message in the background.
int CWinThread::Run()
This is where the message pump is processed in an MFC application. If you do not call this function, the messages will just stack up in the message queue for your thread and never get processed.