解决两个对话框传值程序中断在ASSERT(::IsWindow(m_hWnd)); return InsertItem(LVIF_TEXT, nItem, lpszItem, 0, 0, 0, 0);
2017-02-14 18:23
781 查看
在MFC中创建一个对话框,添加ListControl控件,又在该对话框中创建了一个子对话框。当我将子对话框中的值传到其父对话框的ListControl中时,程序运行时出错,出错的代码行如下:
其中(CParentDlg* )(AfxGetApp()->m_pMainWnd)为指向父对话框的指针,m_list为ListControl的变量名。(我的想法是将父对话框类指针传到子对话框中,进行赋值。)
程序运行中断在以下语句上:
本人由于是个超级菜鸟,在网上搜了很多资料,还是没怎么明白,只是大致知道了该错误是指找不到指定对话框的句柄,无法赋值。而自己的代码具体错在哪还在研究中!
以下是解决办法:(中心思想就是使用公共变量)
1、给该项目添加类,命名为CPublic;
2、在生成的Public.h头文件中的public:中声明一个公共的静态指针变量:static void *m_pparent;
在生成的Pbulic.cpp中给该指针初始化:void* CPublic::m_pparent=NULL;
3、在父对话框的cpp文件中添加Public.h。在OnInitDialog函数中给该指针赋值,使其指向父对话框:
4、在子对话框的cpp文件中添加Public.h。在对ListControl操作的函数中调用m_pparent指针,并对ListControl中的表项传值:
5、再次运行程序,成功!
总结:本人初涉MFC,对于许多要点都是一知半解,因为要完成作业,所以很多知识点并没有掌握。这个错误困扰了我一天,印象深刻,特此记下,以备之后反思。对于基本概念还是必须要认真研读,不要忽略理论的重要性。也希望能给和我有相同错误的人一个新的思路。
继续学习中。。。
参考资料:
http://www.cnblogs.com/lingyun1120/archive/2011/10/31/2230487.html
(CParentDlg* )(AfxGetApp()->m_pMainWnd)-> m_list.InsertItem(row_count,Namestr);
其中(CParentDlg* )(AfxGetApp()->m_pMainWnd)为指向父对话框的指针,m_list为ListControl的变量名。(我的想法是将父对话框类指针传到子对话框中,进行赋值。)
程序运行中断在以下语句上:
ASSERT(::IsWindow(m_hWnd)); return InsertItem(LVIF_TEXT, nItem, lpszItem, 0, 0, 0, 0);
本人由于是个超级菜鸟,在网上搜了很多资料,还是没怎么明白,只是大致知道了该错误是指找不到指定对话框的句柄,无法赋值。而自己的代码具体错在哪还在研究中!
以下是解决办法:(中心思想就是使用公共变量)
1、给该项目添加类,命名为CPublic;
2、在生成的Public.h头文件中的public:中声明一个公共的静态指针变量:static void *m_pparent;
在生成的Pbulic.cpp中给该指针初始化:void* CPublic::m_pparent=NULL;
3、在父对话框的cpp文件中添加Public.h。在OnInitDialog函数中给该指针赋值,使其指向父对话框:
CPublic *pub = (CPublic*)AfxGetApp();//定义一个指向公共类的指针 pub->m_pparent = this;//给公共类的变量赋值
4、在子对话框的cpp文件中添加Public.h。在对ListControl操作的函数中调用m_pparent指针,并对ListControl中的表项传值:
CPublic *pub = (CPublic*)AfxGetApp(); ((CparentDlg*)(pub->m_pparent))->m_manage.InsertItem(row_count,Namestr);//将Namestr的值传给ListControl
5、再次运行程序,成功!
总结:本人初涉MFC,对于许多要点都是一知半解,因为要完成作业,所以很多知识点并没有掌握。这个错误困扰了我一天,印象深刻,特此记下,以备之后反思。对于基本概念还是必须要认真研读,不要忽略理论的重要性。也希望能给和我有相同错误的人一个新的思路。
继续学习中。。。
参考资料:
http://www.cnblogs.com/lingyun1120/archive/2011/10/31/2230487.html
相关文章推荐
- 解决GetDlgItem 使用时出现ASSERT(::IsWindow(m_hWnd))断言
- 写MFC程序ASSERT(IsWindow(pTemp->m_hWnd))报错
- MFC对话框程序不能响应WM_CHAR消息的解决办法
- BOOL CWnd::DestroyWindow()中出现ASSERT(m_hWnd == hWndOrig)断言的原因及解决方法
- 对话框中WaitForSingleObject等待线程退出导致程序阻塞的原因及解决
- STM32 bootloader程序跳转到APP卡死在B_ENDP_ALIGN,原因:有未处理的中断。解决方法:重启系统
- 对话框中WaitForSingleObject等待线程退出导致程序阻塞的原因及解决
- 添加RichEdit控件导致MFC对话框程序无法执行的解决方法
- iOS 上常用的两个功能:点击屏幕和return退出隐藏键盘和解决虚拟键盘挡住UITextField的方法
- 程序调试过程中两个错误的解决:strut2找不到过滤器和sql server2000 连接错误
- 关于“在MFC对话框程序中图片显示不出来”问题的解决方法
- ORA-04063和ORA-06508两个Oracle程序错误的一个解决办法
- 对话框程序菜单项可以禁用但不变灰问题的解决方法
- MFC关于解决点击关闭,对话框仍有后台程序运行问题 .
- PreTranslateMessage DoModal() ASSERT(::IsWindow(m_hWnd)
- 利用if else 语句编写程序读取输入,直到#。用一个感叹号代替每个句号,将原有的每个感叹号用两个感叹号替换,最后 报告进行了多少次替换。
- java--封装一类Java对象,用户从输入对话框输入两个日期,程序将判断两个日期的大小关系(比如输出:您输入的第二个日期大于第一个日期)以及两个日期之间的间隔天数(比如输出:2006年6月6日和
- MSChart控件在对话框程序(vc2010 MFC)中的错误怎么解决?
- 'java' 不是内部或外部命令,也不是可运行的程序的两个解决办法
- MFC程序打开文件对话框出错的问题解决