1 创建一个基于对话框的工程,工程名称为Assistants;
2 向主对话框添加一个标签控件IDC_TAB;
3 为标签添加关连变量;
CTabCtrl m_mainTab;
4 插入3个子窗口(对话框),设置属性,并新建类CDetails、Records、TextBox(会自动建立对应的头文件和CPP文件),类型为子窗口风格;
5 在 A引用子窗口,引用子窗口类的头文件及分别定义类对象:
#include "Records.h"
#include "De;
#include "Tex;
class AssistantsDlg : public CDialog
{
// Construction
public:
AssistantsDlg(CWnd* pParent = NULL);
Records m_Records;
TextBox m_TextBox;
CDetails m_Details;
……
}
6 在主对话框初始化时(OnInitDialog方法中)向标签控件中添加上述的子对话框
//向标签控件中添加选项卡
m_mainTab.InsertItem(0, "RecordsNotes", 0);
m_mainTab.InsertItem(1, "TextBox", 1);
m_mainTab.InsertItem(2, "Details", 2);
//创建子窗口
m_Records.Create(IDD_Records, &m_mainTab);
m_Tex(IDD_TextBox, &m_mainTab);
m_De(IDD_Details, &m_mainTab);
CRect clientRC;
m_Tab.GetClientRect(clientRC); //获取标签客户区域
clien(2, 30, 2, 2); //减少客户区域大小
m_Records.MoveWindow(clientRC); //移动子窗口
m_Tex(clientRC); //移动子窗口
m_De(clientRC); //移动子窗口
m_Records.ShowWindow(SW_SHOW); //显示子窗口
m_Tab.SetCurSel(0); //设置默认选中的标签页
7 处理标签控件的TCN_SELCHANGE消息,该消息在用户改变当前选中的标签而时触发,在消息处理函数中根据当前的标签页索引显示和隐藏相应的子窗口。
void AssistantsDlg::OnSelchangeTab(NMHDR* pNMHDR, LRESULT* pResult)
{
int nCurSel = m_Tab.GetCurSel();
if (nCurSel == 0)
{
m_Records.ShowWindow(SW_SHOW);
m_Tex(SW_HIDE);
m_De(SW_HIDE);
}
else if (nCurSel == 1)
{
m_Records.ShowWindow(SW_HIDE);
m_Tex(SW_SHOW);
m_De(SW_HIDE);
}
else if (nCurSel == 2)
{
m_Records.ShowWindow(SW_HIDE);
m_Tex(SW_HIDE);
m_De(SW_SHOW);
}
*pResult = 0;
}
使用选项卡标签控件设计多页面窗口的对话框程序效果如下:
8 主窗口下的菜单或工具栏如何操作子窗口中的控件
Records m_Records; //子窗口对象;
void CAssistantsDlg::OnICON26()
{
char buf[256];
::GetCurrentDirectory(256,buf);
m_Records.m_(buf); //子窗口对象.编辑框对象
}