一个对话框程序
用CWinThread派生了一个类CtrDevices
要实现CtrDevices类向主线程发消息
//**CtrDevices.CPP**//
BOOL CtrDevices::InitDevice()
{
m_hThreadQuery = ::CreateThread(     
NULL,                                     
0,                                        
ThreadQuery,                        
this,                                
0,                                   
&m_dwThreadIdQuery); 
return TRUE;}
BOOL CtrDevices::ProcessLoop()
{
while (1)
::PostThreadMessage(m_dwThreadIdQuery,WM_DVM_QUERY,NULL,NULL);//给线程ThreadQuery发送WM_DVM_QUERY消息

}
unsigned long WINAPI ThreadQuery(PVOID pvoid)   
{   

MSG   msg;    PeekMessage(&msg, NULL, WM_USER, WM_USER, PM_NOREMOVE);    BOOL  bRet;    while((bRet = GetMessage(&msg, NULL, 0, 0)) != 0)   
{     
if(msg.message == WM_DVM_QUERY)   
{
CString* s_tmp=new CString;
s_tmp->Format(_T("进入ThreadQuery线程"));
::PostMessage((HWND)((CImageProDlg*)AfxGetMainWnd())->GetSafeHwnd(),WM_DISPLAY,NULL,(LPARAM)s_tmp);//给主对话框发送自定义WM_DISPLAY消息 }
}    return   0;   
}
//**ImageProDlg.h**(主线程)中//
#define WM_DISPLAY WM_USER+2 //自定义消息
protected:
LRESULT ReceiveDataSet(WPARAM wParam,LPARAM lParam);//响应函数
//**ImageProDlg.CPP**(主线程)中//
BEGIN_MESSAGE_MAP(CImageProDlg, CDialog)
......
ON_MESSAGE(WM_DISPLAY,ReceiveDataSet)//添加消息映射END_MESSAGE_MAP()
//**自定义消息相应函数**//
LRESULT CImageProDlg::ReceiveDataSet(WPARAM wParam,LPARAM lParam)
{
CString* sTemp=(CString*)lParam;
CString temp=* sTemp;

UpdateData();

temp=m_str_edit+temp+scl;//m_str_edit是一个EDIT控件关联的CString变量
m_str_edit=temp;
UpdateData(false);
    
    return 0;}//**按钮单击相应**//
void CImageProDlg::OnBnClickedButton2()
{
CtrDevices* m_pCtrDevices;
m_pCtrDevices=
(CtrDevices*)AfxBeginThread(RUNTIME_CLASS(CtrDevices));
m_pCtrDevices->InitDevice();
m_pCtrDevices->ProcessLoop();
}按正常的话主对话框的编辑框会显示"进入ThreadQuery线程"字符串,但是调试的过程中 程序停在了PostMessage((HWND)((CImageProDlg*)AfxGetMainWnd())->GetSafeHwnd(),WM_DISPLAY,NULL,(LPARAM)s_tmp);函数上面。跳不到主对话框的消息相应函数ReceiveDataSet上 ,也就是说消息没有发送到主窗口。
请大家指教啊