mfc在控件中嵌入多个窗口,点击按钮切换显示不同窗口

⌚Time: 2022-09-09 01:33:13

👨‍💻Author: Jack Ge

主窗口添加三个按钮与一个picturecontrol控件,切换的多个窗口嵌入到图片控件中

在资源视图中,右键rc资源文件,添加资源,选择Diaglog窗口资源,新建

建立的子窗口,设置窗口属性

Style:child

Border:none

建立3个这种窗口

在主窗口的类中,声明三个Dialog窗口变量


private:

    CDialog childWindow_1;

    CDialog childWindow_2;

    CDialog childWindow_3;

在窗口类的的OnInitDialog函数中,初始化这三个变量,与资源视图中建立的窗口进行关联




BOOL CTestMultiWindowDlg::OnInitDialog()

{

    CDialog::OnInitDialog();



    // 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动

    //  执行此操作

    SetIcon(m_hIcon, TRUE);         // 设置大图标

    SetIcon(m_hIcon, FALSE);        // 设置小图标



    // TODO: 在此添加额外的初始化代码

    //获得图片控件区域

    CRect rect;

    GetDlgItem(IDC_PIC1)->GetClientRect(&rect);

    

    //IDD_DIALOG1是子窗口1的ID,将变量与子窗口1建立关联,IDC_PIC1是图片控件的ID,它将作为父窗口

    childWindow_1.Create(IDD_DIALOG1,GetDlgItem(IDC_PIC1));

    //调整窗口位置

    childWindow_1.SetWindowPos(NULL,rect.left,rect.top,rect.Width(),rect.Height(),SWP_SHOWWINDOW);

    childWindow_2.Create(IDD_DIALOG2,GetDlgItem(IDC_PIC1));

    childWindow_2.SetWindowPos(NULL,rect.left,rect.top,rect.Width(),rect.Height(),SWP_SHOWWINDOW);

    childWindow_3.Create(IDD_DIALOG3,GetDlgItem(IDC_PIC1));

    childWindow_3.SetWindowPos(NULL,rect.left,rect.top,rect.Width(),rect.Height(),SWP_SHOWWINDOW);



    //默认显示第一个窗口

    childWindow_1.ShowWindow(true);

    childWindow_2.ShowWindow(false);

    childWindow_3.ShowWindow(false);



    return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE

}

如何实现点击不同按钮对窗口进行切换?对三个按钮添加点击响应函数


//切换到窗口1

void CTestMultiWindowDlg::OnBnClickedButton1()

{

    // TODO: 在此添加控件通知处理程序代码

    childWindow_1.ShowWindow(true);

    childWindow_2.ShowWindow(false);

    childWindow_3.ShowWindow(false);

}

//切换到窗口2

void CTestMultiWindowDlg::OnBnClickedButton2()

{

    // TODO: 在此添加控件通知处理程序代码

    childWindow_1.ShowWindow(false);

    childWindow_2.ShowWindow(true);

    childWindow_3.ShowWindow(false);

}

//切换到窗口3

void CTestMultiWindowDlg::OnBnClickedButton3()

{

    // TODO: 在此添加控件通知处理程序代码

    childWindow_1.ShowWindow(false);

    childWindow_2.ShowWindow(false);

    childWindow_3.ShowWindow(true);

}


效果:

对于自定义窗体类,需要将变量类型设置为对应的类才会表现出自定义类的特征


    Cus1Dialog childWindow_1;

    Cus2CDialog childWindow_2;

    Cus3CDialog childWindow_3;