Advertisement

MFC子线程中对非模态对话框对象进行开发或创建时会遇到问题。

阅读量:

在不久前编写一段代码的过程中,需要在子线程中生成一个相对于主界面的子对话框,但在运行时出现了异常。通过调试定位到线程内部后,便上网查阅相关资料,发现这一问题较为常见,网络上的讨论也各不相同。有观点明确指出,不应在线程中直接创建对话框,建议采用其他替代方案。例如,可以使用SendMessage或PostMessage函数向主对话框发送创建窗口的消息,从而巧妙地绕过这一问题,并将子对话框的创建任务交由主界面处理。这种方式似乎更加合理。此外,还有一种方法是等待线程执行完毕后再弹出对话框,这种方式适用于特定场景,在我的情况下恰好适用。

在主对话框中的工作线程中:

UINT __cdecl CChatClientDlg::ThreadStartConnect(LPVOID pParam)

{

// 创建非模态对话框

CDlgConnect *pConnectDlg = new CDlgConnect();

pConnectDlg->Create(IDD_DIALOG_CONNECT);

// pConnectDlg->SetWindowPos(&wndTopMost,750,400,NULL,NULL,SWP_NOSIZE); // 设置窗口位置

pConnectDlg->ShowWindow(SW_SHOW);

pConnectDlg->UpdateWindow();

全部评论 (0)

还没有任何评论哟~