在子线程中创建对话框时无法正确显示
Posted
技术标签:
【中文标题】在子线程中创建对话框时无法正确显示【英文标题】:the dialog desn't show correctly when it's created in sub-thread 【发布时间】:2010-10-11 09:22:08 【问题描述】:我正在尝试在我的项目中添加弹出消息功能。我让它在子线程中运行,因为我需要实时通知。但是我发现通知对话框是否是在我的子线程中创建的(由 @ 开始987654321@),对话框的所有元素(按钮,urls....)都没有显示。消息框只是一个空白对话框。如果我提取函数并通过按钮启动它,那么它工作正常。这是函数,它很简单。
UINT sendNotification(LPVOID pParam)
int x = GetSystemMetrics(SM_CXSCREEN);
int y = GetSystemMetrics(SM_CYSCREEN);
testPopDlg *testPop = new testPopDlg;
testPop->Create(IDD_TEST,0);
CRect lprect(0,0,0,0);
testPop->GetWindowRect(lprect);
int w = lprect.Width();
int h = lprect.Height();
testPop->web.Navigate("http://www.google.com",NULL,NULL,NULL,NULL);
testPop->ShowWindow(SW_SHOW);
for(int k=0;k<20;k++) //slide out
testPop->MoveWindow(x-w,y-h*k/20,w,y-h*k/20,1);
Sleep(20);
Sleep(5000); //will close after 5 sec
return 0;
为什么这个函数在子线程中不能正常工作?
【问题讨论】:
【参考方案1】:要在 MFC 中的不同线程上使用对话框,您应该在 UI thread 上创建它。要创建 UI 线程,您基本上必须创建一个派生自 CWinThread 的类。另请参阅code project article。
【讨论】:
以上是关于在子线程中创建对话框时无法正确显示的主要内容,如果未能解决你的问题,请参考以下文章