MFC--table键的使用详述

来源:互联网 发布:windows无法停止dhcp 编辑:程序博客网 时间:2024/04/30 01:32
 首先  新建一个MFC项目,这里基于的是VS2012平台,命名为TabControlDemo,在资源视图的Dialog中添加两个窗口,方法为:右键Dialog->插入Dialog,将ID名分别命名为:IDD_DIALOG_PAGE1和IDD_DIALOG_PAGE2,在属性里做相应的更改,把style改为child,作为子窗口

这里写图片描述
两者均改完之后,F5运行并没有什么变化:
这里写图片描述
连最上面的tab都没有,因此想到初始化的时候没加上以下代码,定位到:
BOOL CTabControlDemoDlg::OnInitDialog()中,添加如下代码:

m_tab.InsertItem(0,L"Page 1");//0代表下标    m_tab.InsertItem(1,L"Page 2");

出现的效果就是在上图中加上一行“page 1”和“page 2”


   OK,现在为了看到切换的tab效果,在两个Dialog各加上一个静态文本框:“我爱你!!”,“Do you love me?”  现在的问题是,两个窗口只存在于资源视图中,并不是正儿八经存在于程序中,因此还必须添加两个类来使用这两个窗口,点击两个窗口右击分别添加类CDlgPage1和CDlgPage2,可以看出左边的资源管理器相应的改变。  在TabControlDemoDlg.h 中包含相应的头文件`#include "DlgPage1.h" #include "DlgPage2.h"`  添加全局变量:
    CDlgPage1  m_page1;    CDlgPage2  m_page2;//全局变量

现在要明确的是,要拿着该对象实现子窗口和父窗口的绑定,因此在TabControlDemoDlg.cpp初始化函数中添加以下代码:

m_page1.Create(MAKEINTRESOURCEW(IDD_DIALOG_PAGE1),&m_tab);    m_page2.Create(MAKEINTRESOURCEW(IDD_DIALOG_PAGE2),&m_tab);    //第一个参数是利用已有的资源进行创建,第二个参数是父窗口,通过这样的方式实现绑定m_page1.ShowWindow(SW_SHOW);    

那这样是不是已经实现了该有的功能了呢 ?发现只有初始的page1界面并不能实现切换:
这里写图片描述

而且发现窗口的尺寸原因,呈现的效果非常差。挡住了整个父窗口。因此还需要通过代码进行控制,如下:

    CRect rec;    //位置对象,四点决定矩形大小    m_tab.GetClientRect(rec);    rec.top+=20;//在上面留一段小空间    m_page1.MoveWindow(rec);//设置两个窗口设置成一样    m_page2.MoveWindow(rec);

这里写图片描述


空间完美匹配哦,现在还需要解决最后一个问题:切换!
这里通过类向导->添加响应函数void CTabControlDemoDlg::OnSelchangeTab1(NMHDR *pNMHDR, LRESULT *pResult)//选择状态发生改变时响应该函数
写下如下代码:

switch (m_tab.GetCurSel())//获取当前选中的位置    {    case 0:        m_page1.ShowWindow(SW_SHOW);        m_page2.ShowWindow(SW_HIDE);        break;    case  1:        m_page1.ShowWindow(SW_HIDE);        m_page2.ShowWindow(SW_SHOW);        break;    default:        break;    }

这里写图片描述
OK大功告成!

0 0
原创粉丝点击