我按照一个教程上讲的做的,是一个可以录入数据的对话框!在一个菜单选项的映射函数中,内容是这样的:
if(m_pRegisterDlg) m_pRegisterDlg->SetActiveWindow(); //激活对话框else
{
//创建非模态对话框 m_pRegisterDlg = new CRegisterDialog(this); m_pRegisterDlg->Create(IDD_REGISTER,this);
}在执行的时候,那个对话框怎么也显示不出来,
可是我敲击键盘后发现虽然对话框没显示出来,可是已经可以录入数据了。我又在那个else里的最后加了一句:
m_pRegisterDlg->ShowWindow(SW_SHOW);执行的时候对话框到是显示出来了,也能录入数据,可是在关闭这个对话框,或者按下cancel后,vc就弹出了一个警告信息,说debug assertion failed!然后就退出了!我应该怎么办呢??????
if(m_pRegisterDlg) m_pRegisterDlg->SetActiveWindow(); //激活对话框else
{
//创建非模态对话框 m_pRegisterDlg = new CRegisterDialog(this); m_pRegisterDlg->Create(IDD_REGISTER,this);
}在执行的时候,那个对话框怎么也显示不出来,
可是我敲击键盘后发现虽然对话框没显示出来,可是已经可以录入数据了。我又在那个else里的最后加了一句:
m_pRegisterDlg->ShowWindow(SW_SHOW);执行的时候对话框到是显示出来了,也能录入数据,可是在关闭这个对话框,或者按下cancel后,vc就弹出了一个警告信息,说debug assertion failed!然后就退出了!我应该怎么办呢??????
解决方案 »
- 如何获得windows自带控件的图像?
- MFC绘图问题。
- 开发webbrowser控件 需要先学习com么?
- 求教CDataGrid,怎么添加行,添加列,设置单元格里面的内容!
- 求教自己在自定义类中PostMessage之后的处理过程,我下面代码哪里需要完善!我的环境是vs2003
- 关于字符串的操作
- 请问什么函数可以根据ip地址得到远程主机名?
- [高手们]如何禁掉某个ip绑定得网卡?回答的完美的,一个人100,另外开贴给
- 如何捕获应用程序窗口外的鼠标事件?
- VC++技术内幕第四版好,还是第五版好?
- 怎样将toolbar中的一项置为无效?
- 想用记事本编写一个window程序,然后用cl进行编译(用意是和纯sdk进行编程),但出错!!!
这句是必须有的,为什么会错就不知道了,没遇见过这种情况出错的!
if(m_pRegisterDlg->GetSafeHwnd())
因为当m_pRegisterDlg成为野指针时,不为NULL,但并不指向对话框。
而且对于非模态对话框,我们应该重载其OnOk()与OnCancel()并在其中调用
DestroyWindow();使得退出对话框时,让对话框消毁。否则对话框只是不可见,但存在。
if(m_pRegisterDlg->GetSafeHwnd())
上月zswzwy(←圣骑士!帕迪拉斯!) 兄得了4千零。真是值得祝贺!
if(m_pRegisterDlg->GetSafeHwnd())
因为当m_pRegisterDlg成为野指针时,不为NULL,但并不指向对话框。
而且对于非模态对话框,我们应该重载其OnOk()与OnCancel()并在其中调用
DestroyWindow();使得退出对话框时,让对话框消毁。否则对话框只是不可见,但存在。值得学习
谢谢!!
我把
OnCancel里的CDialog::OnCancel();和
PostNcDestroy()里的CDialog::PostNcDestroy();
给注释掉,程序就没事了。可这两句话不是我加的呀!
应该是class wizard加上去的吧?这两句话在原来有什么用吗?注释掉不会出什么问题吧!??谢谢!
当删除了一次后,再次打开这个非模态对话框时:
还是进入了这个判断中!if(m_pRegisterDlg->GetSafeHwnd())
因为当m_pRegisterDlg成为野指针时,不为NULL,但并不指向对话框。hWnd = 0xdddddddd
因此报错!
BOOL bCreateResult;
if(!p->GetSafeHwnd())
{
//IDD_MY_DIALOG 为你写的dialog的资源
bCreateResult = p->Create(IDD_YOURDLG, this);
p->ShowWindow(SW_SHOW);
}
else
{
bCreateResult = TRUE;
}这样写试试
CDialog::OnCancel();
DestroyWindow(); //加入的代码
还是进入了这个判断中!删除之后将pRegisterDlg的m_hwnd赋值为NULL或者改用
HWND hwnd = m_pRegisterDlg->GetSafeHwnd();
if(hwnd && ::IsWindow(hwnd))