• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
longaotian
博客园    首页    新随笔    联系   管理    订阅  订阅

day11 – 其他UI

1.1建立一个MFC对话框应用程序,在对话框中拖入Tab Control控件,效果如下:

1.2在对话框类中,声明一个CTabCtrl变量:

CTabCtrl m_tab;

变量m_tab用来与对话框中的Tab Control控件交互,为此要在DoDataExchange函数中加入DDX_Control语句:DDX_Control(pDX, IDC_TAB_TEST, m_tab);

2.1在资源中插入两个对话框,作为Tab Control控件切换的界面,然后必须将这两个对话框的Border属性设置为None,Style设置为Child,设置后的效果如下图所示:

2.2为创建的两个对话框建立两个类,如CTestDlg1,CTestDlg2,添加类的方法:右击对话框界面,在弹出框中选择添加类;

3.1在Tab Control控件所在的对话框类的头文件中添加以下内容并添加切换页面对话框的头文件:

public:
int m_CurSelTab;
CTestDlg1 m_page1;
CTestDlg2 m_page2;
CDialog* pDialog[2]; //用来保存对话框对象指针

3.2在对话框类的初始化函数中需要把CTestDlg1、CTestDlg2和Tab Control关联起来,并保存页面地址,设置初始页面,在OnInitDialog()中添加以下实现代码:

    //为Tab Control增加两个页面
m_tab.InsertItem(0, _T("测试1"));
m_tab.InsertItem(1, _T("测试2"));

//创建两个对话框
m_page1.Create(IDD_DIALOG_TEST1, &m_tab);
m_page2.Create(IDD_DIALOG_TEST2, &m_tab);
//设定在Tab内显示的范围
CRect rc;
m_tab.GetClientRect(rc);
rc.top += 20;
rc.bottom -= 0;
rc.left += 0;
rc.right -= 0;
m_page1.MoveWindow(&rc);
m_page2.MoveWindow(&rc);

//把对话框对象指针保存起来
pDialog[0] = &m_page1;
pDialog[1] = &m_page2;
//显示初始页面
pDialog[0]->ShowWindow(SW_SHOW);
pDialog[1]->ShowWindow(SW_HIDE);
//保存当前选择
m_CurSelTab = 0;

这里我们用了一个CDialog指针数组来进行保存Tab Control的每个页面,数组的大小是Tab Control页面的个数,数组下标对应着每个页面的索引(这样方便快速存取)。

3.3为Tab Control添加消息处理程序,双击Tab Control控件,自动进入消息处理程序代码:

void CTabControlTestDlg::OnTcnSelchangeTabTest(NMHDR *pNMHDR, LRESULT *pResult)
{
// TODO: 在此添加控件通知处理程序代码
//把当前的页面隐藏起来
    pDialog[m_CurSelTab]->ShowWindow(SW_HIDE);
    //得到新的页面索引
m_CurSelTab = m_tab.GetCurSel();
    //把新的页面显示出来
    pDialog[m_CurSelTab]->ShowWindow(SW_SHOW);

*pResult = 0;
}


posted @ 2021-08-08 18:45  longaotian  阅读(32)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3