mfc 多线程UI 如何让多线程UI显示到主对话框中

myiszjf 2016-07-10 09:19:35
我有一个多文档程序, 想用多线程来显示播放器, 在Formview中把播放器的窗口显示出来,请问如何做!我通过UI界面编程把子Formview的窗口句柄传递进去,但是主界面还一直显示的是Formview,播放器的窗口没显示在Formview中!但是鼠标移动到显示播放器的位置时,播放器会出来,一刷新,播放器又不见了!如何用播放器的窗口替换FormView;ps:FormView是通过切割产生的!



这里是用来创建UI线程
int CUIVPlayerFormView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CFormView::OnCreate(lpCreateStruct) == -1)
return -1;

// TODO: 在此添加您专用的创建代码
m_pThreadVPlayer = (CThreadVPlayer *)AfxBeginThread(RUNTIME_CLASS(CThreadVPlayer),
THREAD_PRIORITY_NORMAL, 0, CREATE_SUSPENDED);//创建后先不要启动.
m_pThreadVPlayer->m_hParentWnd = m_hWnd;//主窗口句柄.
m_pThreadVPlayer->ResumeThread();
return 0;
}


// CThreadVPlayer

class CThreadVPlayer : public CWinThread
{
/*去掉了没用到底代码*/
virtual BOOL InitInstance();
virtual int ExitInstance();

IVideoPlayerCtrl *m_videoPlayerCtrl; /播放器对象
public:
HWND m_hParentWnd; //注意,它是父窗口句柄,不能是CWnd*对象.
/*去掉了没用到底代码*/
};


BOOL CThreadVPlayer::InitInstance()
{
// TODO: 在此执行任意逐线程初始化

//ASSERT(::IsWindow(m_ hParentWnd));
CWnd* pParent = CWnd::FromHandle(m_hParentWnd);//注意这行
// CUIChildDlg* pDlg = new CUIChildDlg(pParent);
m_videoPlayerCtrl->Create(pParent,CRect(0,0,80,80));

m_videoPlayerCtrl->ShowWindow(SW_SHOW);

return TRUE;
}

...全文
704 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
myiszjf 2016-07-10
  • 打赏
  • 举报
回复
up up up up up
myiszjf 2016-07-10
  • 打赏
  • 举报
回复
引用 2 楼 oyljerry 的回复:
线程发送消息PostMessage给主线程。让主线程创建UI
你好,那岂不是还是主线程创建的UI,子线程做什么任务呢?因为我的播放器已经写好了,只要给播放器传入视频文件,视频就开始播放!我就想让这个播放器在子相线程中播放,但是又能显示在主界面中,
oyljerry 2016-07-10
  • 打赏
  • 举报
回复
线程发送消息PostMessage给主线程。让主线程创建UI

15,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧