这里首先声明,在此使用的是VC6.0编译器。下面直接讲述步骤,关于原理性的东西请大家看书。
(1) 新建一个基于对话框的MFC应用程序,程序名取为test
(2) 拖入一个树形控件(Tree Control)和一个picture控件,
并把两者的ID名称更改为
ID_Tree_Sel 和ID_STATIC_BTNAREA,并在属性中把前者的Styles更改如下
把后者的Notify属性打上勾
(3) 按ctrl+W打开ClassWizard,在Member Variables中为ID_Tree_Sel添加变量m_tree,为ID_STATIC_BTNAREA添加变量m_area(这个变量这里没有用到,可以不添加)
(4) 新建两个对话框,ID分别为ID_DIALOG1和ID_DIALOG2,并均按下图更改属性Style为child和Border为None。然后在这两个子对话框上分别添加一行文字”This is Dialog 1”和”This is Dialog 2”
(5) 在子对话框1上单击右键,进入classwizard,会弹出一个如下图的Adding a Class对话框问你是否建立一个类,选择Create a new class,然后点击OK,在随后出现的对话框中Name:中输入CDlg1,点击OK
同样,为第二个子对话框建立一个CDlg2的类
(6) 进入testDlg.h文件中,在文件开头加入以下代码
#include "Dlg1.h"
#include "Dlg2.h"
然后新增两个protected类型的变量m_Dlg1和m_Dlg2
CDlg1 m_Dlg1;
CDlg2 m_Dlg2;
转入testDlg.cpp文件中,在OnInitDialog()中加入以下代码
BOOL CTestDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Add "About..." menu item to system menu.
// IDM_ABOUTBOX must be in the system command range.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
// TODO: Add extra initialization here
m_tree.DeleteAllItems();
m_tree.InsertItem("对话框1");
m_tree.InsertItem("对话框2");
m_Dlg1.Create(IDD_DIALOG1, this);
m_Dlg2.Create(IDD_DIALOG2, this);
//根据获得主对话框上图片控件的尺寸,将子对话框嵌入到主对话框中
CRect r;
GetDlgItem(IDC_STATIC_BTNAREA)->GetWindowRect(r);
ScreenToClient(r);
GetDlgItem(IDC_STATIC_BTNAREA)->DestroyWindow();/*这里可以把图形控件销毁了,否则子对话框将不会响应你的鼠标消息*/
// 定位属性页
m_Dlg1.MoveWindow(r);
m_Dlg2.MoveWindow(r);
//根据所要显示的控件进行对话框的消隐工作
m_Dlg1.ShowWindow(SW_HIDE);//显示第一个子对话框
m_Dlg2.ShowWindow(SW_HIDE);
return TRUE; // return TRUE unless you set the focus to a control
}
(7) 进入ClassWizard,接下来我们需要为m_tree添加事件响应代码
在上面对话框中点OK,然后编辑代码,在OnSelchangedTreeSel中添加如下代码
void CTestDlg::OnSelchangedTreeSel(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
TVITEM item0 = pNMTreeView->itemNew;
CString str = m_tree.GetItemText(item0.hItem);
if (str.Compare(_T("对话框1")) == 0)
{
m_Dlg1.ShowWindow(SW_SHOW);//显示第一个子对话框
m_Dlg2.ShowWindow(SW_HIDE);//隐藏第二个子对话框
}
else
{
m_Dlg1.ShowWindow(SW_HIDE);//隐藏第一个子对话框
m_Dlg2.ShowWindow(SW_SHOW);//显示第二个子对话框
}
*pResult = 0;
}
大功告成!!
**************************
http://hi.baidu.com/luo_chen00/blog/item/25cdf09031a74c5bd0135e9d.html
原帖地址!