BOOL CMyUIThread::InitInstance()
{
// TODO:  perform and per-thread initialization here
CFrameWnd * pFrameWnd=new CFrameWnd();
        m_pMainWnd = pFrameWnd; //将pFrameWnd的值赋给m_pMainWnd,线程退出时会自动释放内存空间
pFrameWnd->Create(NULL,"用户界面线程",WS_OVERLAPPEDWINDOW,CRect(100,300,600,500));
pFrameWnd->ShowWindow(SW_SHOW);
pFrameWnd->UpdateWindow();
return TRUE;
}
    ...void CCreateUIThreadDlg::OnCreateUIThread() 
{
// TODO: Add your control notification handler code here
AfxBeginThread(RUNTIME_CLASS(CMyUIThread)); //产生用户界面线程
}
能帮我解释下两个注释的地方吗?
(1)为什么将pFrameWnd的值赋给m_pMainWnd,线程退出时会自动释放内存空间,如果没有这句话呢?
(2)书上说AfxBeginThread是用来创建线程的.
  1)那在这里创建"用户界面线程",这个线程是干什么的?是用来显示之前创建的"用户界面线程"窗口吗?
  2)上面的程序和下面有什么区别!
BOOL CMyUIThread::InitInstance()
{
// TODO:  perform and per-thread initialization here
return TRUE;
}
    ...void CCreateUIThreadDlg::OnCreateUIThread() 
{
// TODO: Add your control notification handler code here
CFrameWnd * pFrameWnd=new CFrameWnd();
        m_pMainWnd = pFrameWnd; //将pFrameWnd的值赋给m_pMainWnd,线程退出时会自动释放内存空间
pFrameWnd->Create(NULL,"用户界面线程",WS_OVERLAPPEDWINDOW,CRect(100,300,600,500));
pFrameWnd->ShowWindow(SW_SHOW);
pFrameWnd->UpdateWindow();
}