UINT ThreadA(LPVOID pParam)
{
CBase *p=(CBase*)pParam;
p->Compute();
if(p->m_pTheadA!=NULL)
{
p->m_pTheadA=NULL;
}
::PostMessage(p->GetView()->GetSafeHwnd(),MSG_XXXXX,0,0);
return 0;
}
void CBase::StartThreadA()
{
if(m_pThreadA!=NULL)
{
if(!TerminateThread(m_pThreadA->m_hThread,0UL))
return;
delete m_pThreadA;
m_pThreadA=NULL;
}
m_pThreadA= AfxBeginThread(ThreadA,this,THREAD_PRIORITY_IDLE,0,0,NULL);
}

解决方案 »

  1.   

    在一个view中
    BOOL CXXView::PreTranslateMessage(MSG* pMsg) 
    {
    // TODO: Add your specialized code here and/or call the base class if(pMsg->message==MSG_XXXXX&&m_pBase!=NULL)
    {
                .......
                .......
    }

    return CView::PreTranslateMessage(pMsg);
    }
      

  2.   

    试了啊  sendmessage 感觉好像一点儿用都没有
      

  3.   

    用PostMessage很不专业,用PostThreadMessage向你的主线程发送消息更专业一些,你的问题也可以得到解决。
      

  4.   

    点菜单时响应WM_ENTERIDLE消息,这样处理
           BEGIN_MESSAGE_MAP(CMyDlg, CDialog) 
                  //{{AFX_MSG_MAP(CMyDlg)
                        ON_WM_ENTERIDLE()
                  //}}AFX_MSG_MAP
           END_MESSAGE_MAP()           void CMyDlg::OnEnterIdle(UINT nWhy, CWnd* pWho) 
              {
                      CDialog::OnEnterIdle(nWhy, pWho);
      MSG msg;
      if (PeekMessage(&msg, m_hWnd, MSG_XXXXX, MSG_XXXXX,PM_REMOVE))
                      {
                           .......
                           .......                  }          }