我用mfc多线程新建对话框,对话框只是闪一下就消失了,该线程就结束了,不知该怎样做让它通过关闭按钮消失

这是主对话框类中加入线程回调函数声明:staticUINTCALLBACKThreadProc(LPVOID);ThreadProc的函数体为:UINTCtestDlg:... 这是主对话框类中加入线程回调函数声明:
static UINT CALLBACK ThreadProc(LPVOID);
ThreadProc的函数体为:
UINT CtestDlg::ThreadProc(LPVOID lp)
{
show *dlg=new show;
dlg->Create(IDD_DIALOG1,NULL);
dlg->ShowWindow(TRUE);
return 0;
}
下面是按键响应函数,并创建线程
void CtestDlg::OnBnClickedrun()
{
// TODO: 在此添加控件通知处理程序代码

UINT count=100;

CWinThread* pThread=AfxBeginThread((AFX_THREADPROC)ThreadProc,(LPVOID)count,THREAD_PRIORITY_NORMAL,0,0,0);

}
不知道该加什么才能达到目的,谢谢
展开
 我来答
alphaxyd_1
2012-06-19 · TA获得超过520个赞
知道小有建树答主
回答量:1233
采纳率:0%
帮助的人:704万
展开全部
dlg->DoModal()

或,变量dlg要为全局变量
你程序中的是局部变量,生存期showwindow后就结束了
追问
把dlg设置为全局变量还是不行啊,怎么回事
归悦欣cf
2012-06-19 · TA获得超过1444个赞
知道大有可为答主
回答量:4250
采纳率:59%
帮助的人:1329万
展开全部
dlg应该定义为全局的,按照你现在的定义,只要程序退出这个函数,dlg变量就无效了,当然对话框也就消失了。
更多追问追答
追问
我在主对话框CtestDlg.cpp的开头用show *dlg;
把以前的show *dlg=new show;也改为dlg=new show还是不行
追答
首先你现在的修改肯定是正确的。如果这样还不行,其中原因不是很清楚。不过实现你需要的功能还是可以的,因为这种功能我也做过,思路是这样的:show *dlg可以在CtestDlg类中定义,dlg=new show和dlg->Create(IDD_DIALOG1,NULL);放在对话框初始化函数中,然后你定义一结构,里面包含CtestDlg类指针,之后定义该结构变量,把结构变量中的CtestDlg类指针赋值为主窗口对话框指针,最后把定义的结构变量最为参数调用ThreadProc,利用该参数中的dlg调用ShowWindow(TRUE);显示对话框。还有一个问题,ThreadProc函数前面怎么会有CtestDlg::,
ThreadProc函数应该是全局函数呀。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
_coolin_
2012-06-19
知道答主
回答量:25
采纳率:0%
帮助的人:25万
展开全部
.....
dlg->ShowWindow(SW_SHOW);
MSG msg;
while(GetMessage(&msg,0,0,0))
{
TranslateMessage (&msg);
DispatchMessage (&msg);
}
还有就是有new就要delete,并且赋值NULL,这是习惯~
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式