情况描述:
小弟在一个对话框应用程序中开启另一个用户界面线程,想在主对话框中通过新线程的指针设置界面线程对话框的标题及相关属性,但就是得不到正确的指针,经调试还发现了若干奇怪问题,
详见问题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语句突然不输出了,不知道因为我改了那些东西,为什么?
小弟在一个对话框应用程序中开启另一个用户界面线程,想在主对话框中通过新线程的指针设置界面线程对话框的标题及相关属性,但就是得不到正确的指针,经调试还发现了若干奇怪问题,
详见问题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语句突然不输出了,不知道因为我改了那些东西,为什么?
解决方案 »
- MFC动态加载图片
- vs2005 mfc c++ "OnInitDialog" : is not a member of 'CDialog'
- DLL中创建的非摸态对话框问题,急死了!
- 一个关于FormView的问题,SOS!
- 怎样去掉或隐藏拆分窗口(CSplitterWnd)中的拆分条?
- 关于gluBuild2DMipmaps和glTexSubImage2D
- 高分 求 稳定的TCP 网络文件传输的代码
- 从View视图获取CMainFrame的指针!
- 关于ActiveX控件的一个奇怪问题!
- 我用来处理一个放在Dialog上的ToolBar的UI更新的代码在debug版本下正常工作,而在release(maximize speed)下出错.
- 语音对讲
- 转贴--娶漂亮女人的后期维护要注意什么?
老生常谈了