
你这种用法,就要保证m_tree在父窗口是public的,否则其他类中无法访问的,protected属性另当别论,此处无需讨论;一般情况下不推荐直接使用public属性定义成员变量,所以你给一个public属性的接口就好了:
// 定义在父窗口中
public:
void get_m_tree() { return m_tree; }; // 不要用void,换成m_tree的类型
// 或者最直接的
cstring get_selected_string() { return m_treegetcurtest(); };
#defing WM_MYMSG WM_USER+100
::PoseMessage(窗口句柄,WM_MYMSG, ……)
::SendMessage(窗口句柄,WM_MYMSG, ……)
也可以在主窗口中/父窗口中开启一个定时器和一个消息List
定时器去读取消息List并调用对应函数,并从消息List中移除已经处理了的消息
子线程负责把消息添加到消息List就可以了
添加和删除消息时,互斥一下,锁一下消息List,保证同一时刻,只有一个线程 *** 作
子窗体里的public partial class FormChild : Form下写
FormParent parent;
public FormChild(FormParent parent)
{
thisparent=parent;
}
调用父窗口的对象的话要把需调用的对象写成public
然后parent对象 就能点出来了
还有就是父窗体打开子窗体的时候需这样写FormChild child=new FormChild(this);
然后show出来就行了
你在创建子窗口的时候可以通过
构造函数
把父窗口的指针传给子窗口,比如:
CDlg
m_Dlg(this);
也可以在子对话框中用
GetParent
函数即时获取父窗口的指针或者
窗口句柄
;
通过获取到的指针或者窗体句柄就可以控制父窗口的控件了。
但通常的做法是获取父窗口的指针/句柄后给父窗口发个消息,让其在消息响应函数中做你想要他完成的工作,比如你说的改变控件的显示或者行为。
你预想的方式简单迅捷,但是不建议这么做,最好采用“给父窗口下命令
->
父窗口执行”方式
以上就是关于C++ (MFC)的子窗口调用父窗口控件对象全部的内容,包括:C++ (MFC)的子窗口调用父窗口控件对象、MFC 怎么在子线程中发送消息给父窗口调用父窗口的函数、VS2010, C#,子窗口如何获取其父窗口对象等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)