*** 一个MDIGetActive()调用失败的问题……关键字:FromHandle,IsKindOf,GetActiveView
在一个MDI程序的视图类中启动一个工作者线程,代码如下:
CMainFrame* pFrame=(CMainFrame*)(AfxGetApp()->m_pMainWnd);
if(pFrame==NULL)
MessageBox("无法得到主窗口句柄");
else
AfxBeginThread(COMPILE,pFrame);
该线程过程开始部分代码如下:
UINT COMPILE(LPVOID pParam)
{
CMainFrame* pFrame=(CMainFrame*)pParam;
// >>>>> 问题就出在下面的MDIGetActive上
CChildFrame *pCFrame=(CChildFrame*)(pFrame->MDIGetActive());
if(pCFrame==NULL) return 1;
CMyAppView *pView=(CMyAppView *)pCFrame->GetActiveView();
if(pView==NULL) return 1;
…………
}
MDIGetActive()调用失败,跟进的结果发现问题出在MDIGetActive里面调用的FromHandle上,FromHandle返回了一个临时的窗口句柄,在紧接着的ASSERT IsKindOf 的时候就出错了,这两句代码如下:
CMDIChildWnd* CMDIFrameWnd::MDIGetActive(BOOL* pbMaximized) const
{
…………
CMDIChildWnd* pWnd = (CMDIChildWnd*)CWnd::FromHandle(hWnd);
ASSERT(pWnd == NULL || pWnd->IsKindOf(RUNTIME_CLASS(CMDIChildWnd)));
…………
return pWnd;
}
有人遇到过这样的问题吗?300分?求解决方案!