在网上关于tab control控件的讲解都是vc6.0并且是基于对话框的我用08的直接在应用上!
但是我也按他们说的做了!效果没出来挺悲剧的!也就是最好几步是这样的:最后是要求 为Tab Control添加消息处理程序void CTab_testView::OnInitialUpdate()函数问题是添加这个函数时 、他直接出现在Tab control 的模板的文件中、我引用其他文件的变量就引用不到;还有就是Tab control 对话框的上边你不给他添加类文件 、上边是没有消息处理的;你要是想把oid CTab_testView::OnInitialUpdate()视图类中 就添加不进去;
或者说你们谁有08的 tab control控件的使用方法;
不是单独建立对话框模式的那中、在SDI单文档程序里面的那中;
你们若是要代码我也不知道发 那一部分;
都是系统自己生成的;我也就是分割了下
不知道说清楚了没;
帮帮忙!谢谢
我刚搞MFC!

解决方案 »

  1.   

    没说清楚 如果你会用tab控件 找教程看看 应该一大把
      

  2.   

    http://hi.baidu.com/blue_never_died/blog/item/04398694249ef71ed21b7007.html你们看看这个是什么意思
    你们觉得他说起清楚 了吗!
      

  3.   

    假如我现在有个SDI程序,View是Form View,想在上面放个Tab Control,包含两个Page。现在让我们来看看应该怎样处理。首先当然要增加一个Tab Control资源,然后利用Class Wizard,在View中增加一个Control变量。接着建立两个对话框资源,别忘了把Style改为Child,Border改为None。然后就可以在上面加其他控件了。接着利用Class Wizard,分别为这两个对话框建立两个类,比如CPage1和CPage2。然后在View类头文件中,加入这两个对话框对象。同时增加一个变量int m_CurSelTab,用了表明是哪个Page即将被切换。为了避免用户在切换Tab时,程序对Tab Index的枚举,可以利用数组来做这个事情。在View的初始化函数中需要把CPage1、CPage2和Tab Control关联起来,并保存页面地址,设置初始页面,等等。void CTab_testView::OnInitialUpdate()
    {
       CFormView::OnInitialUpdate();
       GetParentFrame()->RecalcLayout();
       ResizeParentToFit();
         
        //为Tab Control增加两个页面
        m_tab.InsertItem(0, _T("First"));
        m_tab.InsertItem(1, _T("Second"));
        
        //创建两个对话框
        m_page1.Create(IDD_DIALOG1, &m_tab);
        m_page2.Create(IDD_DIALOG2, &m_tab);    //设定在Tab内显示的范围
        CRect rc;
        m_tab.GetClientRect(rc);
        rc.top += 20;
        rc.bottom -= 8;
        rc.left += 8;
        rc.right -= 8;    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页面的个数,数组下标对应着每个页面的索引(这样方便快速存取)。用户切换时,需要响应相关的消息。void CTab_testView::OnSelchangeTab1(NMHDR* pNMHDR, LRESULT* pResult) 
    {
     // TODO: Add your control notification handler code here
        
        pDialog[m_CurSelTab]->ShowWindow(SW_HIDE);
        m_CurSelTab = m_tab.GetCurSel();
        pDialog[m_CurSelTab]->ShowWindow(SW_SHOW); *pResult = 0;
    }首先我们先把当前的页面隐藏起来,然后得到新的页面索引,最后就把相关页面显示出来即可。这比一个个去枚举简单多了。还有一点比较有意思,那就是DDX/DDV机制的运用。要想获得Tab Control各个页面的数据,可以利用DDX/DDV机制,但需要注意,因为这是多个页面,所以需要显式调用多次。void CTab_testView::OnButton1() 
    {
     // TODO: Add your control notification handler code here
        m_page1.UpdateData();
        m_page2.UpdateData();
        CString str1 = m_page1.m_str1;
        CString str2 = m_page2.m_str2;
        AfxMessageBox(str1);
        AfxMessageBox(str2);
    }