MFC CTabCtrl 控件问题?我最近 在做一个界面程序 ,在CDialogBar 上面创建一个 CTabCtrl 控件;
我是这样做的:1. 在 自定义的 CDialogBar .h 文件中 添加  CTabCtrl m_Tab 控件,添加资源ID  #define   IDT_WATCH2  1002 ;2. 在初始化的时候 调用了 BOOL BF=m_Tab.Create(WS_CHILD | WS_VISIBLE | TCS_TABS| TCS_RIGHTJUSTIFY ,rc2,this,IDT_WATCH2);   
// 其中的类型我尝试了很多种(遍) ,显示的结果却是 标签按钮 的高度是整个对话框的高度? 这是为仕么,3. if(BF)
   {
         m_Tab.SetItemSize(sz);
//m_Tab.GetClientRect(rc2);
rc=rc2;
m_Tab.SetWindowPos(0,rc.left,rc.top,rc.Width(),rc.Height(),SWP_SHOWWINDOW);
///**************** Init  page ********************* m_Tab.InsertItem(0,_T("数据监视"));
m_Tab.InsertItem(1,_T("图形化监视"));
m_WatchTab1.Create(IDD_WATCHDLG1,GetDlgItem(IDT_WATCH2));
m_WatchTab2.Create(IDD_WATCHDLG2,GetDlgItem(IDT_WATCH2));
CRect rect;
m_Tab.GetClientRect(&rect);
rect.top+=20;
rect.right-=4;
rect.left+=4;
rect.bottom-=4;
m_WatchTab1.MoveWindow(&rect);
m_WatchTab2.MoveWindow(&rect);
// 默认显示第一个子窗口 
m_Tab.SetCurSel(0);
m_WatchTab1.ShowWindow(SW_SHOW);
}我用资源编辑器 添加的  CTabCtrl m_Tab 控件,添加变量,用上面的方法就可以,不过不用 Create()方法,为仕么?等待大师们解答。。

解决方案 »

  1.   

    http://www.codeproject.com/KB/tabs/lbtab.aspx
      

  2.   

    Create 方法与系统静态生成无本质区别,跟踪一下,看你Create的CRect对不对.
      

  3.   

    Create的tab和资源中直接添加字体有什么不同么?
      

  4.   

    跟踪了,知道 m_WatchTab1.MoveWindow(&rect);  这句执行前 矩形尺寸是变了,但是现实就是不变!就是为仕么 我选的默认 类型 ,显示按钮的高度是 对话框的高度?用添加资源CTabCtrl 控件,就现实表签正常?
      

  5.   

    没弄明白什么意思, 不过用这个试下:
    m_Tab.GetWindowRect(&rect);
    ScreenToClient(&rect);
      

  6.   


    这个方法试过了, 还是老样子!现在的问题不是 CTabCtrl 控件不能 调整大小和位置, 而是 CTabCtrl 控件上添加的对话框模板显示不正常?就是标签页的按钮 一般不都是 在顶部有小按钮么, 我的标签页按钮高度是整个CTabCtrl控件的高度?我的类型选择的也没错啊?我大概描述一下:
    CTabCtrl 矩形如下
    ----------------------------
    | ------------                       |
    ||        |           |                       |
    ||        |           |                       |
    ||        |           |                       |
    ||        |           |                       |
    ||数据监视 |图形化监视   |   CDialog Client      |
    ||        |           |                       |
    ||        |           |                       |
    ||        |           |                       |
    ||        |           |                       |
    ----------------------------
      

  7.   


    上传到你的csdn空间里, 然后在回帖里引用 URL
      

  8.   

    要不麻烦你们到这个地址去看:-----http://hi.csdn.net/space-1258140-do-album-picid-774865.html----
      

  9.   

    需要 IDD_WATCHDLG1 IDD_WATCHDLG2 确保是WS_CHILD风格
    试试这样  m_Tab.InsertItem(0, _T("Item1"));
      m_Tab.InsertItem(1, _T("Item2"));  CRect rect;
      m_Tab.GetClientRect(rect);
      m_Tab.AdjustRect(FALSE, rect);
      m_Tab.ClientToScreen(rect);
      ScreenToClient(rect);
      
      m_WatchTab1.MoveWindow(&rect);
      m_WatchTab2.MoveWindow(&rect);
      

  10.   


    我又一次检查了 IDD_WATCHDLG1 IDD_WATCHDLG2 仅仅是WS_CHILD 风格,没别的风格!你上面的代码我试了,还是老样子!郁闷。,不过还是谢谢大家,希望有做过类似界面的高手指点?
      

  11.   


    Create() 的时候我没指定字体啊,这有关系么?
      

  12.   

    m_Tab.SetWindowPos(0,rc.left,rc.top,rc.Width(),rc.Height(),SWP_SHOWWINDOW);改成:m_Tab.SetWindowPos(0,rc.left,rc.top,rc.Width(),25,SWP_SHOWWINDOW);
      

  13.   


    你上面哪个 25 高度 是指 CTabCtrl 的高度吧! 不是标签按钮的高度吧1我的CTabCtrl 是可以改变大小的,现在是标签页 (对话框资源)不能改变大小位置?
      

  14.   

    我的这个问题 还有人能回答么?  waiting .......
      

  15.   

    问题 已经 解决了, 就是CTabCtrl 控件要建立在 CDialog 资源上!而我原来的 CTabCtrl 控件 建立在 CDialogBar 资源上 就出现上面的错误 !我和大家分享 这个解决问题的方法!