想实现:把对话框B(上面有个按钮)镶嵌到对话框A(空的)中,看起来就像是在对话框A上放了一个按钮,其实这个按钮是对话框B的
我的做法是:
建立一个基于对话框的工程--对话框A
然后在这工程又添加了一个对话框类--对话框B
并把对话框B属性中的Border设置为None,Style设置为Child
下面该怎么做才能实现我一开始说的效果呢?

解决方案 »

  1.   

    在对话框A 建一个对话框B 类型的成员变量在对话框 A 的某个成员函数里调用对话框B 类 Create 函数通过 MoveWindow 之类的将生成的子对话框移到需要的位置
      

  2.   

    在a的OnInitDialog里面动态创建b对话框,并调整位置m_dialogB.Create(IDD_DIALOG_B, this);
      

  3.   

    上面的方法是可以
    但我需要对话框B是真正的在对话框A里面,就是说,对话框A拖动的话,B也随着动
    现在是A动了,B还在原来的位置上
    如何实现,在B上的按钮就像是A上的一样!!!
      

  4.   

    你做的工作没有做充分。首先,你做的那几步是正确的。后续的工作是:ClassA: public CDialog
    {
    ClassB ObjectB;//在A中声明B的对象
    }BOOL ClassA::OninitDialog()
    {
    CDialog::OninitDialog();
    m_Init = TRUE;//设定一个初始值标识已经初始化完成
    return TRUE;
    }
    void CLASSA::OnSize()
    {
    if(!m_Init)
    return;
    CRect rcThis;
    GetClientRect(&rcThis);
    ObjectB.MoveWindow(rcThis);
    }
      

  5.   

    向资源视图中添加类型为表单视图的对话框资源,它的类型ID为IDD_FORMVIEW,假设这个对话框的ID也是IDD_FORMVIEW。在为这个对话框类联类型CChildDlg之后,为主对话框添加一个指针成员: 
    CChildDlg* m_Dlg; 
    在对话框初始化的时候: C/C++ code
    BOOL CChildDialogDlg::OnInitDialog()
    {
        CDialog::OnInitDialog();
            m_Dlg=new CChildDlg();    m_Dlg->Create(IDD_FORMVIEW,this);
        
        m_Dlg->ShowWindow(SW_SHOW); //这是必须的,只要是创建了对话框,无论它在哪里,都要使用ShowWindow
        CRect rect;
        m_Dlg->GetClientRect(&rect);
        m_Dlg->MoveWindow(100,100,rect.right,rect.bottom);//将对话框移动到你需要的位置。
    }主对话框重载父类的PostNcDestroy函数,在这个函数中删除成员指针: 
    void CChildDialogDlg::PostNcDestroy() 

    delete m_Dlg; 
    }
      

  6.   

    [Quote=引用 7 楼 wutaihua 的回复:]
    你做的工作没有做充分。 首先,你做的那几步是正确的。后续的工作是: ClassA: public CDialog
    {
        ClassB ObjectB;//在A中声明B的对象
    }BOOL ClassA::OninitDialog()
    {
        CDialog::OninitDialog();
        ObjectB.Creat(IDD_DIALOG_B, this)//这句漏了
        m_Init = TRUE;//设定一个初始值标识已经初始化完成
        return TRUE;
    }
    void CLASSA::OnSize()
    {
        if(!m_Init)
            return;
        CRect rcThis;
        GetClientRect(&rcThis…
    }
    漏了一句