#include "A2Dlg.h"
……
CA1Dlg:::OnTimer(UINT_PTR nIDEvent)
{
CDialog::OnTimer(nIDEvent);
Fn();
}
void CA1Dlg::Fn(void)
{
while(m_bTrue1)
{
while(m_bTrue2)
{
if(m_bTrue3)
{
CA2Dlg dlg;
dlg.DoModal();
return;
}
}
}
}请各位大哥帮我看看这段代码,进入函数Fn()后,程序就一直跳不出来了,return语句好象无法返回。所以就一直不端的弹出CA2Dlg 的对话框。请问怎么样才能在弹出第一个对话框后,就跳出所有的while循环体,继续下一个OnTimer检查??
CA2Dlg* dlg = new CA2Dlg;
dlg->Create(对话框资源ID);
dlg->ShowWindow(SW_SHOW);
再在CA2Dlg类中响应WM_CLOSE消息,调用DestroyWindow函数;重载PostNcDestroy函数,delete this。
大哥能具体解释下 为什么return返回不了呢?为什么要这样才能解决呢?
再者,非模态对话框关闭时要用delete删除。
dlg->Create(对话框资源ID);
dlg->ShowWindow(SW_SHOW);
KillTimer(nEvent);CA2Dlg* dlg设置为全局的
DoModel里面有消息循环,因为你没有停止定时,所以还会继续产生定时消息,执行定时函数,如果定时函数中判断的条件没有变,自然就又执行到显示对话框的代码了。这是程序的逻辑问题。
pDlg= new CA2Dlg();
dlg->Create(对话框资源ID);
dlg->ShowWindow(SW_SHOW);
条件改变,以防重复判断。()...在CA2Dlg类中PostNcDestroy函数,delete this
其实我认为用一个While循环就可以了。
直接就
While(m_bTrue1 && m_bTrue2)
{
if{m_bTrue1||m_bTrue2||m_bTrue3}
{
return;//这里提前作处理,更好一点样的。
}
if{m_bTrue3)
{
//想办法随便改变一下m_bTrue1 或m_bTrue2,m_bTrue3的值
m_bTrue1=False;
m_bTrue2=Fales;
CA2Dlg dlg;
dlg.DoModal();
// return;//这句只有在dlg关闭后才能返回。应该是费CODE;
}
}
具体要怎样,看你程序的功能了。