您的位置:首页 > 其它

解决两个对话框传值程序中断在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.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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐