15,979
社区成员
发帖
与我相关
我的任务
分享
AfxBeginThread(PickDayThreadProc, this);
UINT __cdecl PickDayThreadProc(LPVOID lpParam)
{
CMyDialog_GN* pThisDlg = (CMyDialog_GN*)lpParam;
CString strPickUrl, strGetUrl;
int iSel = pThisDlg->m_cbx_pick.GetCurSel();
strPickUrl = pThisDlg->m_PU[iSel].m_PickDayUrl;
//获取父窗口指针
Cfeifeicms网站应用Dlg* m_pPWnd = (Cfeifeicms网站应用Dlg*)(pThisDlg->GetParent());
//获取父窗口的网站地址
strGetUrl = m_pPWnd->strUrl;
return 0;
}
Cfeifeicms网站应用Dlg* m_pPWnd = (Cfeifeicms网站应用Dlg*)(pThisDlg->GetParent());
这句里面,断下查看,其中所有的父窗口的成员都是为NULL 获取不到值。不知道为什么。如果吧以上代码放入模态对话框中的按钮响应函数里则获取正常。
//偷懒,弄一个全局变量
AFX_MODULE_THREAD_STATE* g_pmts;
//启动线程之前要执行这句
g_pmts=AfxGetModuleThreadState();
AfxBeginThread(PickDayThreadProc, this);
UINT __cdecl PickDayThreadProc(LPVOID lpParam)
{
CMyDialog_GN* pThisDlg = (CMyDialog_GN*)lpParam;
CString strPickUrl, strGetUrl;
int iSel = pThisDlg->m_cbx_pick.GetCurSel();
strPickUrl = pThisDlg->m_PU[iSel].m_PickDayUrl;
//关键的地方,切换线程状态
AFX_MODULE_THREAD_STATE* mts=AfxGetModuleThreadState();
AFX_MODULE_THREAD_STATE backup_mts;
memcpy(&backup_mts,mts,sizeof(AFX_MODULE_THREAD_STATE));
memcpy(mts,g_pmts,sizeof(AFX_MODULE_THREAD_STATE)); //获取父窗口指针
Cfeifeicms网站应用Dlg* m_pPWnd = (Cfeifeicms网站应用Dlg*)(pThisDlg->GetParent());
//获取父窗口的网站地址
strGetUrl = m_pPWnd->strUrl;
//恢复作案现场
memcpy(mts,&backup_mts,sizeof(AFX_MODULE_THREAD_STATE));
return 0;
}