一种简单的方式更改对话框内容






2.89/5 (15投票s)
2004年3月1日

84600

808
改变对话框内容的一种简单方法。
目标
在开发用户界面时,我们经常会遇到在选择任何管理元素(组合框)时,需要改变对话框内容的问题。
本文重现了实现此功能的方法。


指令
首先,你需要创建父窗口,其内容将会改变,并在其中放置一个管理内容改变的控制元素。让下拉列表(ComboBox)控制父窗口的内容变化。子窗口将被放置在由矩形控件元素(Picture,类型为Frame)框定的区域内。

现在,是时候创建子窗口了——具有Style为Child、Border为None以及相应大小的对话框窗口。为每个对话框创建子类,从CDialog派生。
- CDialogDlg- 父窗口(基于对话框的应用程序);
- CChildDlg1- 第一个子窗口;
- CChildDlg2- 第二个子窗口。
添加到 DialogDlg.h
#include "ChildDlg1.h"; #include "ChildDlg2.h";
添加到定义 CDialogDlg 类
    public:
        CChildDlg1 m_View1;
        CChildDlg2 m_View2;
然后,将以下文本添加到 CDialogDlg::OnInitDialog() 函数中,在 return TRUE 之前
    CWnd* pWnd = GetDlgItem( IDC_FRAME );
    CRect rect;
    pWnd->GetWindowRect( &rect );
    ScreenToClient( &rect );
    //Creating a ChildDld1
    m_View1.Create( IDD_VIEW1, this );
    m_View1.ShowWindow( WS_VISIBLE | WS_CHILD );
    m_View1.SetWindowPos( pWnd, 0, rect.top, rect.right, 
                               rect.bottom, SWP_SHOWWINDOW );
    //Creating a ChildDld2
    m_View2.Create( IDD_VIEW2, this );
    m_View2.ShowWindow( WS_VISIBLE | WS_CHILD );
    m_View2.SetWindowPos( pWnd, 0, rect.top, rect.right, 
                               rect.bottom, SWP_HIDEWINDOW );
    m_Select.SetCurSel(0); //Setting first element of a ComboBox
创建下拉列表(ComboBox)的功能,其内容将会改变
if (m_Select.GetCurSel() == 0) { m_View1.ShowWindow(SW_SHOW); m_View2.ShowWindow(SW_HIDE); } else { m_View1.ShowWindow(SW_HIDE); m_View2.ShowWindow(SW_SHOW); }
编译并运行。
