情况描述:
小弟在一个对话框应用程序中开启另一个用户界面线程,想在主对话框中通过新线程的指针设置界面线程对话框的标题及相关属性,但就是得不到正确的指针,经调试还发现了若干奇怪问题,
详见问题1、2、3、4//问题1 如何得到 pWinThread中主窗口的指针呢?下面语句(使用m_pMainWnd)肯定不正确,否则就不会有问题2
CWinThread *pWinThread;
pWinThread= ::AfxBeginThread(RUNTIME_CLASS(CThrdSpeakToOne));
TRACE("g_TD.pWinThread->GetMainWnd(): %d \n" ,g_TD.pWinThread->GetMainWnd());
TRACE("g_TD.pWinThread->m_pMainWnd: %d \n" ,g_TD.pWinThread->m_pMainWnd);
TRACE("AfxGetMainWnd(): %d \n" ,AfxGetMainWnd());
//下面提供一组TRACE的值
//pWinThread->GetMainWnd(): 23002900 
//pWinThread->m_pMainWnd: 23002900 
//AfxGetMainWnd(): 1244396 
((CThrdSpeakToOne*)pWinThread)->m_pMainWnd->SetWindowText("与"+strAsk+"聊天中");
//问题2 上面这句的结果改变的不是新的界面对话框的标题,而是主对话框的标题 为什么?
TRACE("pWinThread->GetRoutingFrame(): %d \n" ,pWinThread->CCmdTarget::GetRoutingFrame());
//问题3 结果为零,GetRoutingFrame()得到什么,为什么结果为零//CThrdSpeakToOne类 派生自CWinThread类
//相关信息
CThrdSpeakToOne::CThrdSpeakToOne()
{
}
BOOL CThrdSpeakToOne::InitInstance()
{
CDTalkToOne dlg; //CDTalkToOne派生自CDialog的类
m_pMainWnd = &dlg;
dlg.DoModal();
TRACE("this->GetMainWnd(): %d \n" ,this->GetMainWnd()); //1
TRACE("m_pMainWnd: %d \n" ,m_pMainWnd);//2 
//1 和 2 的结果相同
TRACE("this->GetRoutingFrame(): %d \n" ,this->GetRoutingFrame());//结果为0 ???
// returning false will make MFC doing the cleanup for us :)
return FALSE;
}
//问题4 1、2、3TRACE语句突然不输出了,不知道因为我改了那些东西,为什么?