【求助】获取父指针后如何操作父对话框控件?

辅_ 2015-12-09 09:53:56
楼主有Dlg1(父)和Dlg2(嵌于tab控件的子窗口)两个窗口
利用CDlg1* dlg1=(CDlg1*)GetParent();获取了父窗口Dlg1的指针,父窗口有listCtrl(变量名:m_listctrl)和Edit控件(变量名:m_edit)
那么问题来了,
dlg1->m_edit.SetWindowText("13143242");编译通过,运行中断


操作m_listctrl同样报错

那么究竟如何操作父指针呢?请详细解答,谢谢
...全文
125 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
辅_ 2015-12-09
  • 打赏
  • 举报
回复
引用 1 楼 zgl7903 的回复:
可以试试在Dlg1中添加一个接口函数, 通过调用这个函数操作

void CDlg1::SetEditText(LPCTSTR str)
{
m_Edit.SetWindowText(str)
}

dlg1->SetEditText(_T("1234"))

我试着调用一个listctrl的函数和调用变量一样出错

zgl7903 2015-12-09
  • 打赏
  • 举报
回复
可以试试在Dlg1中添加一个接口函数, 通过调用这个函数操作

void CDlg1::SetEditText(LPCTSTR str)
{
m_Edit.SetWindowText(str)
}

dlg1->SetEditText(_T("1234"))
辅_ 2015-12-09
  • 打赏
  • 举报
回复
引用 5 楼 zgxyz2010 的回复:
[quote=引用 4 楼 xyz59886 的回复:] [quote=引用 3 楼 zgxyz2010 的回复:] 断言失败说明CListCtrl关联的窗口没创建。楼主要确保Dlg1确实创建出来了,其次确保GetParent()函数返回的的确是Dlg1的指针,最后 dlg1->m_edit.SetWindowText("13143242");这段代码一定要在主线程(界面线程)中调用。 楼主可以在Dlg2定义一个Dlg1的指针变量,通过该类的构造函数,明确将Dlg1作为指针参数传入到Dlg2中,试试。如果还不行,就调用PostMessage向Dlg1发送一个自定义消息来实现。
谢谢回复,虽然已经解决,但你说到重点了因为子对话框在TAB控件下,所有要两次GetParent()获得父对话框指针。 请教一下,A和B是两个同一级别的对话框,分别有一个按钮,点击按钮都弹出C对话框,那么C算是谁的子对话框呢?[/quote]谁创建了C,C就是谁的子对话框。A、B都能弹出,那会产生2个C,分别是A、B子对话框。[/quote] thanks~
小竹z 2015-12-09
  • 打赏
  • 举报
回复
引用 4 楼 xyz59886 的回复:
[quote=引用 3 楼 zgxyz2010 的回复:] 断言失败说明CListCtrl关联的窗口没创建。楼主要确保Dlg1确实创建出来了,其次确保GetParent()函数返回的的确是Dlg1的指针,最后 dlg1->m_edit.SetWindowText("13143242");这段代码一定要在主线程(界面线程)中调用。 楼主可以在Dlg2定义一个Dlg1的指针变量,通过该类的构造函数,明确将Dlg1作为指针参数传入到Dlg2中,试试。如果还不行,就调用PostMessage向Dlg1发送一个自定义消息来实现。
谢谢回复,虽然已经解决,但你说到重点了因为子对话框在TAB控件下,所有要两次GetParent()获得父对话框指针。 请教一下,A和B是两个同一级别的对话框,分别有一个按钮,点击按钮都弹出C对话框,那么C算是谁的子对话框呢?[/quote]谁创建了C,C就是谁的子对话框。A、B都能弹出,那会产生2个C,分别是A、B子对话框。
辅_ 2015-12-09
  • 打赏
  • 举报
回复
引用 3 楼 zgxyz2010 的回复:
断言失败说明CListCtrl关联的窗口没创建。楼主要确保Dlg1确实创建出来了,其次确保GetParent()函数返回的的确是Dlg1的指针,最后 dlg1->m_edit.SetWindowText("13143242");这段代码一定要在主线程(界面线程)中调用。 楼主可以在Dlg2定义一个Dlg1的指针变量,通过该类的构造函数,明确将Dlg1作为指针参数传入到Dlg2中,试试。如果还不行,就调用PostMessage向Dlg1发送一个自定义消息来实现。
谢谢回复,虽然已经解决,但你说到重点了因为子对话框在TAB控件下,所有要两次GetParent()获得父对话框指针。 请教一下,A和B是两个同一级别的对话框,分别有一个按钮,点击按钮都弹出C对话框,那么C算是谁的子对话框呢?
小竹z 2015-12-09
  • 打赏
  • 举报
回复
断言失败说明CListCtrl关联的窗口没创建。楼主要确保Dlg1确实创建出来了,其次确保GetParent()函数返回的的确是Dlg1的指针,最后 dlg1->m_edit.SetWindowText("13143242");这段代码一定要在主线程(界面线程)中调用。 楼主可以在Dlg2定义一个Dlg1的指针变量,通过该类的构造函数,明确将Dlg1作为指针参数传入到Dlg2中,试试。如果还不行,就调用PostMessage向Dlg1发送一个自定义消息来实现。

16,467

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧