我想在函数里调用线程弹出一个对话框,在函数体里有运算部分,我想在运算结束时,让对话框自动关闭。怎么做呢?实验代码如下:
BOOL CMainFrame::test()
{
THREAS *ptp=new THREAS;
AfxBeginThread(ThreadFunc,ptp);
for(int i;i<70000;i++)
{
for(int j;j<70000;j++)
{
int k;
k=0;
}
}
return TRUE;
}
UINT ThreadFunc(LPVOID pParam)
{ CDlgtest dlg;
dlg.DoModal();
// dlg.Create(IDD_DIALOG1,0);
// dlg.ShowWindow(SW_SHOW); return true;
}我尝试了无模式和模式两种对话框。发现无模式出现一下就消失了,模式在运算结束后才弹出。
我怎样才可以让函数运行期间,一直有一个对话框?函数运行完对话框自动关闭呢?
BOOL CMainFrame::test()
{
THREAS *ptp=new THREAS;
AfxBeginThread(ThreadFunc,ptp);
for(int i;i<70000;i++)
{
for(int j;j<70000;j++)
{
int k;
k=0;
}
}
return TRUE;
}
UINT ThreadFunc(LPVOID pParam)
{ CDlgtest dlg;
dlg.DoModal();
// dlg.Create(IDD_DIALOG1,0);
// dlg.ShowWindow(SW_SHOW); return true;
}我尝试了无模式和模式两种对话框。发现无模式出现一下就消失了,模式在运算结束后才弹出。
我怎样才可以让函数运行期间,一直有一个对话框?函数运行完对话框自动关闭呢?
{ CDlgtest *dlg = new CDlgtest;
dlg.Create(IDD_DIALOG1,0);
dlg.ShowWindow(SW_SHOW); return true;
}
//改为在堆上生成对象
LRESULT CDlgtest::DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
// TODO: Add your specialized code here and/or call the base class
switch(message)
{
case CLOSE_PROGRESS_DLG:
CDialog::OnOK();
break;
}
return CDialog::DefWindowProc(message, wParam, lParam);
}
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、BOOL CMainFrame::test()
{
THREAS *ptp=new THREAS;
AfxBeginThread(ThreadFunc,this);
for(int i;i<70000;i++)
{
for(int j;j<70000;j++)
{
int k;
k=0;
}
}
::PostMessage(dlg->m_hWnd, CLOSE_PROGRESS_DLG,0,0);
return TRUE;
}UINT ThreadFunc(LPVOID pParam)
{
this->dlg.DoModal();
return true;
}
{
(CMainFrame)pParam->dlg.DoModal();
return true;
}
象你那样的话是对象在栈上生成的.
无模式对象框里面没有消息循环,线程结束后对话框也消失了.
而堆生成的对象要delete才能释放
dingpiao() 你说的是用消息关闭它,现在还没消息他自己就关了,我想知道怎么办呀。
可以叫他不要关。
{ CDlgtest *dlg=new CDlgtest;
// dlg->DoModal();
dlg->Create(IDD_DIALOG1,0);
dlg->ShowWindow(SW_SHOW);
return true;
}BOOL CMainFrame::test()
{
// MessageBox("come on baby!");
THREAS *ptp=new THREAS;
AfxBeginThread(ThreadFunc,ptp);
for(int i;i<70000;i++)
{
for(int j;j<70000;j++)
{
int k;
k=0;
}
}
return TRUE;
}
代码改成这样了,可是还是在分析结束后出现,而且还是闪一下就没有了,怎么好呢?
我按你的作了
没用的
UINT ThreadFunc(LPVOID pParam)
{ MSG msg; CDlgtest *dlg=new CDlgtest;
dlg->Create(IDD_DIALOG1,0);
dlg->ShowWindow(SW_SHOW);
while(GetMessage( &msg, NULL, 0, 0 ))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}