线程中创建动态对话框
想在线程中循环创建非模态对话框.
我写了个如下的测试程序:
UINT ADOProc(LPVOID pParam)
{
int j=0,i=0;
while(true)
{
if(j==0)
{
for(i=0;i<10;i++)
{
dlg[i]= new CDlgWarn;
dlg[i]->Create(IDD_DIAWARM,AfxGetApp()->m_pMainWnd->GetSafeOwner());
dlg[i]->ShowWindow(SW_NORMAL);
j=100;
}
}
j=100;
Sleep(000);
}
return 1;
}
这样创建的非模态对话框,根本就不能操作,我想移动非模态对话框,都不行.而且我是CDlgWarn *dlg[10];是个全局变量,根本就不是根据需要动态创建.
我现在需要在线程中动态创建任意多个非模态对话框;退出后,非模态对话框,依然存在.
问题点数:100、回复次数:9Top
1 楼jinxuliang(smielfox)回复于 2006-03-10 22:24:40 得分 0
Sleep(000);
更正写错了
Sleep(1000);
Top
2 楼striking(庸人自扰)回复于 2006-03-10 22:29:11 得分 20
你这样写出现了什么问题.??
另外线程里面创建对话框, 最好传递句柄,然后CWnd::FromHandle();返回指针Top
3 楼jinxuliang(smielfox)回复于 2006-03-10 22:35:58 得分 0
re:你这样写出现了什么问题.??
(1)样创建的非模态对话框,根本就不能操作,我想移动非模态对话框,都不行.
(2)不是动态创建Top
4 楼DentistryDoctor(不在无聊中无奈,就在沉默中变态)回复于 2006-03-10 22:45:51 得分 40
你的线程应该是UI线程。也不是说你需要处理消息物质循环。
// Start the message loop.
BOOL bRet=FALSE;
MSG msg;
while( (bRet = GetMessage( &msg, NULL, 0, 0 )) != 0)
{
if (bRet == -1)
{
// handle the error and possibly exit
}
else
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
Top
5 楼jinxuliang(smielfox)回复于 2006-03-10 22:58:34 得分 0
你的线程应该是UI线程。也不是说你需要处理消息物质循环。
???
你是说我的是UI线程,需要自己处理消息循环是吗?Top
6 楼cyblueboy83(爱情白痴—电脑迷)回复于 2006-03-10 23:29:09 得分 0
关注
Top
7 楼Mackz(在相互)回复于 2006-03-10 23:52:37 得分 20
用pParam传入窗口句柄,下面创建的时候以此为父窗口。
动态创建,就是动态分配一个对话框类指针:
CMyDialog *pDlg = new CMyDialog;
pDlg->Create(...);
最好用一个列表(CList/CObList)或者数组(CArray/CObArray)来管理。
Top
8 楼jinxuliang(smielfox)回复于 2006-03-11 00:29:04 得分 0
俺用了个变通办法
在线程里PostMessage
在CMainFrame里自定义一个消息处理函数
在自定义消息里,创建非模态对话框,问题解决.
但是我还是想请,那位大哥给我写个在线程中动态创建对话框的示例,而且在线程退出时,对话框不消失Top
9 楼jiangsheng(蒋晟.Net[MVP])回复于 2006-03-11 03:41:15 得分 20
>在线程退出时,对话框不消失
搞笑吧?线程退出不就没消息循环了么?你想要根本就不能操作的对话框?Top




