例:
第一个对话框DlgA中有一个button,两个组合框Cmb1,Cmb2。第二个对话框DlgB中有一个标签控件(Tab),其对应三个子对话框ziDlg1,ziDlg2,ziDlg3,每个子对话框都有一个列表控件list1,list2,list3。现操作:
单击DlgA中的button,启动DlgB,选择其中一个标签卡,双击其中的列表控件中某一行,根据条件判断,使其数据传递到DlgA中相应的Cmb1或Cmb2,DlgB立即关闭,DlgA中的Cmb1或Cmb2立即更新显示相应传递来的数据。这应是常见的操作,但我不知道如何实现,请各位大侠出手相助,给出思路,最好能简单给些代码(当然不用演示条件判断,我只想知道,启动DlgB后,双击列表控件,数据如何传递到相应的Cmb并即时显示)。
第一个对话框DlgA中有一个button,两个组合框Cmb1,Cmb2。第二个对话框DlgB中有一个标签控件(Tab),其对应三个子对话框ziDlg1,ziDlg2,ziDlg3,每个子对话框都有一个列表控件list1,list2,list3。现操作:
单击DlgA中的button,启动DlgB,选择其中一个标签卡,双击其中的列表控件中某一行,根据条件判断,使其数据传递到DlgA中相应的Cmb1或Cmb2,DlgB立即关闭,DlgA中的Cmb1或Cmb2立即更新显示相应传递来的数据。这应是常见的操作,但我不知道如何实现,请各位大侠出手相助,给出思路,最好能简单给些代码(当然不用演示条件判断,我只想知道,启动DlgB后,双击列表控件,数据如何传递到相应的Cmb并即时显示)。
CWnd *XX=NULL;在stdafx.h里申明为外部变量
extern CWnd *XX;在DlgA的初始化赋值
XX=this;之后在你想要操作的地方XX->想干嘛就干嘛
DlgB中的OnDblclkList1消息中添加
CDlgA* pWnd = (CDlgA*)AfxGetMainWnd();
pWnd->Cmb1=你要给DlgA的值
DlgB中的OnDblclkList1消息中添加
CDlgA* pWnd = (CDlgA*)AfxGetMainWnd();
pWnd->Cmb1=你要给DlgA的值////////////////////////////////////
这样会DlgA和DlgB相互包含。
并且CDlgA* pWnd会让我胆颤心惊,我可能控制不好它。DlgA关闭时还要Delete,使之等于NULL。还是多谢你的关注。我只是想可否能用指针(或者句柄)的方式找到DlgA中的相关控件,并使用其相应的函数方法获取DlgB中的数据。
希望有这方面经验的高手给指点。
多谢,我会试这个方法。
只是我还想可否能用指针(或者句柄)的方式找到DlgA中的相关控件,并使用其相应的函数方法获取DlgB中的数据。如使用FindWindow
当然可以了,MFC的窗体设计本来就是一个树形结构,有一个API叫做GetDlgItem,利用这个API便可以从父窗体获得子窗体的HWND,从而操作子窗体。这样不管嵌套多少层都没有问题。还是那个思路:
同一层的窗体,比如你提到的DialogA和DialogB,两者可以通过SendMessage通信;
不同层次的窗体,最好严格控制作用域范围,DialogA的子窗体只能由DialogA来直接操作,DialogB同理;
如果DialogB“妄想”操作DialogA的子窗体(比如SubDlgA),那么只能间接操作,也就是先给DialogA发送消息,然后由DialogA来操作SubDlgA,明白了吗?之所以要这样做是为了降低不同模块之间的耦合程度。如果DialogA和DialogB本来就属于不同的模块,那么它们之间的通信最好全部都依赖于抽象的消息定义,而不是相互之间直接引用(比如在DialogA.h里头加DialogB的全局指针变量,或者在DialogB.h里头加DialogA的全局指针变量,这都是不提倡的做法,这样会增加模块间的耦合度)
同一层的窗体,比如你提到的DialogA和DialogB,两者可以通过SendMessage通信;
不同层次的窗体,最好严格控制作用域范围,DialogA的子窗体只能由DialogA来直接操作,DialogB同理;
如果DialogB“妄想”操作DialogA的子窗体(比如SubDlgA),那么只能间接操作,也就是先给DialogA发送消息,然后由DialogA来操作SubDlgA,明白了吗?之所以要这样做是为了降低不同模块之间的耦合程度。如果DialogA和DialogB本来就属于不同的模块,那么它们之间的通信最好全部都依赖于抽象的消息定义,而不是相互之间直接引用(比如在DialogA.h里头加DialogB的全局指针变量,或者在DialogB.h里头加DialogA的全局指针变量,这都是不提倡的做法,这样会增加模块间的耦合度)////////////////////////////////////////////////////////
非常感谢yao050421103(yao050421103),希望得到象这样高手更多的指点。有事先下了,分我会给您的。