一个基于对话(dlg1)的应用,程序中用SetTimer(1,1000,NULL)开了一个定时器,在OnTimer()中检测一个外部事件的发生,若事件发生则弹出另外一个模式对话,但若在OnTimer()中用dlg2.DoModal()来显示dlg2,不仅会阻塞本次OnTimer()中dlg2.DoModal()以下的程序的执行,使本次OnTimer()无法返回;并且当下次(1秒后)OnTimer()执行时会发生什么?当dlg2退出返回时,还能返回吗?请问各位大侠有什么好办法?
解决方案 »
- 如何用VC保存Powerpoint2003文档
- 后天第一份工作 散分
- 从二维数组a[3][4]中的每一行选出最大数,再从这下选出的最大数中选出一最小数
- 记录集为只读的问题
- 初入VC++.提出简单问题一个
- 怎样获得Edit Box中的整数信息?
- 如何让背景图片和对话框的大小相适应
- 我有一个EDIT(单行)我想在当用户输入完按回车时调用我的函数要怎样?
- 请问谁有ActiveX Controls Inside Out 中文版本AciveX 控制元件彻底研究电子版
- 请问有没有函数可直接把 WCHAR 转换成 CHAR? CHAR 到 WCHAR 呢?
- 两台计算机之间传输图象的问题。
- 关于MFC程序的Winmain()函数的问题?
dlg2 *pdlg2;
pdlg2=new dlg2();
if(pdlg2->GetSafeHwnd())
pdlg2->DestroyWindow();
pdlg2->Create(IDD_DIALOG2,NULL);但是,由于dlg2中定义有比较多的CBitmap,CBrush类型的对象,第一次显示dlg2时没有问题;第二次显示时,运行到CBitmap.LoadBitmap()时会出错,必须在CBitmap.LoadBitmap()之前调用CBitmap.DeleteObject()才行,这是为什么?我想CBitmap对象是dlg2的成员,既然dlg2已退出且销毁,为何CBitmap不能直接LoadBitmap();而用模式对话时,就不存在这样的问题?
CDialog* m_pDlg;
BOOL m_bShowFlag;//显示标志
...//cpp中初始化
m_pDlg = NULL;
m_bShowFlag = FALSE;
if(!m_pDlg)
{
m_pDlg = new dlg2();
}
if(m_bShowFlag)
{
m_pDlg->ShowWindow(SW_HIDE);//隐藏
}
else
{
m_pDlg->ShowWindow(SW_SHOW);//显示
}
m_bShowFlag = !m_bShowFlag;
//在析构函数中删除
if(m_pDlg)
delete m_pDlg;
非常感谢,我用了new,但却没有delete,结果他还是驻留在内存中!