CTabCtrl中的Dialog 在 初始化 时 要 MoveWindow

解决方案 »

  1.   

    子对话框Create的时候,MoveWindow到正确的位置,参考CTabCtrl的ClientRect区域
      

  2.   

    还想问一个ctabctrl的问题:
    封好的类内将create函数内的坐标参数的right, bottom 设置成0,这样做是不是为了能让子对话框类能充满客户区?同样的,当我拖放界面时发现子对话框的大小是固定的,即无论拉多大,右边永远是灰的,        m_BsInfo.MoveWindow(rectL.left, rectL.top,(cx-27),(cy-40),1);   
    没有效果~~
    请问是什么原因~3Q
      

  3.   

    对于ctabctrl类不熟悉,就将就用了.对于4#的问题我发现ctabctrl的子控件cdialog的客户区的大小是固定的(660,420),这是什么原因呀?
      

  4.   

    要改“封装好的类”代码
    “CTabCtrl中的Dialog 在 初始化 时 要 MoveWindow”
      

  5.   


    我在onsize里MoveWindow,但是发现客户区不变,结果出现4楼的样子
      

  6.   

    “在onsize里” 看看代码?
      

  7.   

    封装的有问题。我最近也在搞CTabCtrl,后来看看不难,自己整一个很快的。我用的是WTL,不过原理一样的。我还增加了两个功能:
    1.单个Tab可以屏蔽,不让选择;
    2.我加了一个CTab关闭按钮,可以整个窗口关掉我建议你自己搞一个,我本来还想OwnrDraw自绘呢。这样可以使屏蔽的字体颜色灰掉,后来试了下有些麻烦。就不用了,没有灰掉就算了。范例的样子,刚搞完!
      

  8.   

    tab一般是要内嵌对话框的
    你的应用放到这个对话框上
    你检查一下子对话框有没有问题
    也可以参考这篇文章
    http://blog.csdn.net/xianglitian/article/details/5618814
      

  9.   

    不管放哪里 , 对话框 一定要 MoveWindow到 Tab 的 客户区,
    即 取 Tab 客户区 大小 (GetPatent-》 GetClientRect MovwWindow)
      

  10.   


    我对MFC不太熟,我的思路是创建的时候用SetWindowPos设置两个子对话框的位置,
    然后关联ON_WM_SIZE信号,最后在ctabctrl,dialog中Onsize添加MoveWindow但是问题是即使我把界面拖放变大,控件会变大,但是客户区不变,结果控件给遮住了.(4楼有图)
    怎么才能让客户区变化??
      

  11.   

    有没有关于ctabctrl自适应的文章呀
      

  12.   


    没看到你提及的封装类,不敢妄评。不过建议你去看看http://www.codeproject.com/Articles/2475/A-WTL-Tab-Control-for-Managing-Tab-Views里面的范例,里面有个 calc的函数void CTabPane::CalcViewRect(CRect* pRect)
    {
    GetClientRect( *pRect );  if (pRect->Height() > 0 && pRect->Width() > 0 ) {
    // Calculate the Height (or Width) of the tab . . .
    // cause it could be Multiline CRect theTabRect;
    GetItemRect( 0, &theTabRect ); LONG theRowCount = GetRowCount();
    LONG theEdgeWidth = ( theTabRect.Width() * theRowCount ) + TABVIEW_EDGE;
    LONG theEdgeHeight = ( theTabRect.Height() * theRowCount ) + TABVIEW_EDGE; // Set the size based on the style
    DWORD dwStyle = GetStyle();
    if ((dwStyle & TCS_BOTTOM) && !(dwStyle & TCS_VERTICAL)) { // Bottom
    (*pRect).top += TABVIEW_BORDER;
    (*pRect).left += TABVIEW_BORDER;
    (*pRect).right -= TABVIEW_BORDER;
    (*pRect).bottom -= theEdgeHeight;
    }
    else if ((dwStyle & TCS_RIGHT) && (dwStyle & TCS_VERTICAL)) { // Right
    (*pRect).top += TABVIEW_BORDER;
    (*pRect).left += TABVIEW_BORDER;
    (*pRect).right -= theEdgeWidth;
    (*pRect).bottom -= TABVIEW_BORDER;
    }
    else if (dwStyle & TCS_VERTICAL) { // Left
    (*pRect).top += TABVIEW_BORDER;
    (*pRect).left += theEdgeWidth;
    (*pRect).right -= TABVIEW_BORDER;
    (*pRect).bottom -= TABVIEW_BORDER;
    }
    else { // Top
    (*pRect).top += theEdgeHeight;
    (*pRect).left += TABVIEW_BORDER;
    (*pRect).right -= TABVIEW_BORDER;
    (*pRect).bottom -= TABVIEW_BORDER;
    }
    }}里面要紧的是
    GetItemRect( 0, &theTabRect ); //获取tab头部大小
    LONG theRowCount = GetRowCount();//有几个tab
    LONG theEdgeWidth = ( theTabRect.Width() * theRowCount ) + TABVIEW_EDGE;
    LONG theEdgeHeight = ( theTabRect.Height() * theRowCount ) + TABVIEW_EDGE;根据这些,可以判断你的头部大小,剩下的都是你的ClientRECT 我反正就是这么自适应的。
      

  13.   

    有没有关于ctabctrl自适应的文章呀自适应就是在OnSize中调整
    是不是TabCtrl不重要
    你可以参考http://blog.csdn.net/xianglitian/article/details/5667015
      

  14.   

    有没有关于ctabctrl自适应的文章呀自适应就是在OnSize中调整
    是不是TabCtrl不重要
    你可以参考http://blog.csdn.net/xianglitian/article/details/5667015我已经在其中一个dialog中改写了onsize,但是ctabctrl的客户区不变,导致被遮住了.现在这个问题解决不了.如果可能的话能看下代码么,我把代码传到github下了.位置:
    https://github.com/mxy0226/MAC_Manage
    或skydirver:
    http://sdrv.ms/1dCdwCi3Q~~
      

  15.   

    [email protected]
    我用下.先谢过了~~