例:
第一个对话框DlgA中有一个button,两个组合框Cmb1,Cmb2。第二个对话框DlgB中有一个标签控件(Tab),其对应三个子对话框ziDlg1,ziDlg2,ziDlg3,每个子对话框都有一个列表控件list1,list2,list3。现操作:
单击DlgA中的button,启动DlgB,选择其中一个标签卡,双击其中的列表控件中某一行,根据条件判断,使其数据传递到DlgA中相应的Cmb1或Cmb2,DlgB立即关闭,DlgA中的Cmb1或Cmb2立即更新显示相应传递来的数据。这应是常见的操作,但我不知道如何实现,请各位大侠出手相助,给出思路,最好能简单给些代码(当然不用演示条件判断,我只想知道,启动DlgB后,双击列表控件,数据如何传递到相应的Cmb并即时显示)。

解决方案 »

  1.   

    多谢两位,我可以试一下传递自定义消息的方法。只是我心里很想使用指针或句柄来进行对话框之间的数据传递,如使用FindWindow()获得有关的句柄或指针后进行数据传递,好像这样要方便些,但我不知道如何去弄。希望有高手指点。
      

  2.   

    你喜欢走弯路,可以有弯路的办法在stdafx.cpp定义变量
    CWnd *XX=NULL;在stdafx.h里申明为外部变量
    extern CWnd *XX;在DlgA的初始化赋值
    XX=this;之后在你想要操作的地方XX->想干嘛就干嘛
      

  3.   

    这样试试
    DlgB中的OnDblclkList1消息中添加
    CDlgA* pWnd = (CDlgA*)AfxGetMainWnd();
    pWnd->Cmb1=你要给DlgA的值
      

  4.   

    http://topic.csdn.net/u/20110519/09/9fc0637b-4c04-4df1-934d-5cb53caaa7dc.html
      

  5.   

    to:fengbingchun(Spring)多谢你的建议。只是我不喜欢用DoModal(),这样造成关闭DlgA后,双击列表框,又要重启DlgA,窗口闪来闪去的,有点不爽。另外也会造成两个对话框类相互包含。
     
     
      

  6.   

    用消息吧,你碰到的就是窗口之间的通信问题,SendMessage - WindowProc 全部可以搞定
      

  7.   

    to:fengbingchun(Spring)也不想用全局变量,因为我的DlgA中有较多的控件要同时进行此操作,会造成全局变量较多。
      

  8.   

    To:ATMCash4423(ATMCash)这样试试
    DlgB中的OnDblclkList1消息中添加
    CDlgA* pWnd = (CDlgA*)AfxGetMainWnd();
    pWnd->Cmb1=你要给DlgA的值////////////////////////////////////
    这样会DlgA和DlgB相互包含。
    并且CDlgA* pWnd会让我胆颤心惊,我可能控制不好它。DlgA关闭时还要Delete,使之等于NULL。还是多谢你的关注。我只是想可否能用指针(或者句柄)的方式找到DlgA中的相关控件,并使用其相应的函数方法获取DlgB中的数据。
    希望有这方面经验的高手给指点。
     
      

  9.   

    TO:yao050421103(yao050421103)用消息吧,你碰到的就是窗口之间的通信问题,SendMessage - WindowProc 全部可以搞定////////////////////////////////////////
    多谢,我会试这个方法。
    只是我还想可否能用指针(或者句柄)的方式找到DlgA中的相关控件,并使用其相应的函数方法获取DlgB中的数据。如使用FindWindow
      

  10.   


    当然可以了,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的全局指针变量,这都是不提倡的做法,这样会增加模块间的耦合度)
      

  11.   

    当然可以了,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的全局指针变量,这都是不提倡的做法,这样会增加模块间的耦合度)////////////////////////////////////////////////////////
    非常感谢yao050421103(yao050421103),希望得到象这样高手更多的指点。有事先下了,分我会给您的。