在另外一个类中调用一个窗口类中的listbox的控制变量的成员函数出错!

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在另外一个类中调用一个窗口类中的listbox的控制变量的成员函数出错!相关的知识,希望对你有一定的参考价值。

MFC中,我建立一个窗口Cpage4,在这个窗口中,建立一个listbox,并且给这个listbox添加一个控制变量m_list,然后我在我要在自己创建的一个普通类A中调用这个控制变量的m_list.FindString函数。我的做法如下。
在A类的这个函数B中:
创建一个Cpage4 的对象,spage4;
然后这样调用:
spage4.m_list.FindString(-1,str);
这样之后编译时没有错误。但是程序运行的时候出现ASSERT的错误。
找到错误的地方如下:
_AFXWIN_INLINE int CListBox::FindString(int nStartAfter, LPCTSTR lpszItem) const
ASSERT(::IsWindow(m_hWnd)); return (int)::SendMessage(m_hWnd, LB_FINDSTRING,nStartAfter, (LPARAM)lpszItem);
请求原理性的知识,以及我的这个问题的详细解决办法!

Cpage4 spage4;新创建的对象有自己分配的内存空间,已无法调用原页面类的成员变量。
可以在主框架类(如CMainFrame)中定义该类的指针
Cpage4 *pPage4;
然后在Cpage4的OnInitDialog中进行赋值
CMainFrame *pMain = (CMainFrame *)AfxGetApp()->GetMainWnd();
pMain->pPage4 = this;
最后在类A中调用该类的成员变量
pMain->pPage4.m_list.FindString(-1,str);
参考技术A 回家了 重新回答你的问题
假设:父窗口:CFDlg;成员变量 public:int a;子窗口CCDlg;
更改a的值应该首先在CCDlg内包含CFDlg.h然后通过以下代码
((CFDlg*)GetParent())->a = 1对a进行更改。
不知道你的问题是不是要问这个。。

以上是关于在另外一个类中调用一个窗口类中的listbox的控制变量的成员函数出错!的主要内容,如果未能解决你的问题,请参考以下文章

如何在C#中,在一个类里调用另外一个类的方法

Win32 ListBox WNDPROC 从未调用过

objective-c 中如何在一个函数中调用自己类中的另外一个函数

this的用法

c#中如何在一个类中调用click方法

python中怎么在一个函数内调用另外一个函数,类