FromHandlePermanent 两次返回值不一致。解决思路

FromHandlePermanent 两次返回值不一致。。。
下面这段代码是在View中,发送了一个消息,消息的参数是view的句柄。

void CMy12View::OnInitialUpdate() 
{
CView::OnInitialUpdate();

// TODO: Add your specialized code here and/or call the base class
CChildFrame* p=(CChildFrame*)this->GetParentFrame();
CMainFrame* p2=(CMainFrame*)p->GetParentFrame();
CMainFrame* pFrame=(CMainFrame*)::AfxGetApp()->GetMainWnd();
CChildFrame* p3=(CChildFrame*)p->GetActiveFrame();
HWND temp=this->m_hWnd;
CMy12View* p4=(CMy12View *)FromHandlePermanent(temp);
pFrame->SendMessage(WM_VIEW_COMPLETE,(WPARAM)this->m_hWnd,(LPARAM)this);
}

调试到这一步,上述的temp其实就是view的句柄,通过FromHandlePermanent(temp)返回的对象指针也是等于this指针的。说明这里没有问题。

然后:
程序接着运行,跳转到一个新的线程中的这个函数里:

UINT CMy12Doc:: threadDoc(LPVOID pParam)
{
HWND m_view=*(HWND*)pParam;
CMy12View * pView=(CMy12View*)CWnd::FromHandlePermanent(m_view);//FromHandle(m_view);
CMy12Doc* pDoc=(CMy12Doc*)pView->GetDocument();
pDoc->pointVec.push_back((int)m_view%77);
return 0;
}


这一步,pParam的值就是之前view的句柄,但是FromHandlePermanent的返回值却变成了NULL,找不到对象了。
请问是什么原因呢?

难道是因为子线程不能通过句柄找到其他线程的对象吗?为什么呢?
如果要在子线程中获得主线程的View,该怎么做?
------解决思路----------------------
FromHandlePermanent()是查找mfc的afxMapHWND()映射的HWND和CWnd来实现的,而afxMapHWND()映射的内容是储存在TLS(thread local storage)变量里的,结果就是跨线程无法查找。

还是建立你自己的映射吧,最简单的就是在view的某个初始化过程中用SetWindowLongPtr(hwnd, GWL_USERDATA, (LONG_PTR)this); 将view object和hwnd关联起来。这样不管哪个线程都可以通过GetWindowLongPtr获取相关的object(只要强制类型转换一下)。