在家里写个tab control,好无问题,可是到公司,移植代码立即有错。问题:tab control 被固定死了,随着主对话框不会动, 这是为什么? 发帖数次,依然没有解决问题,我精神快崩溃了望仗义大侠出手相救,感激不已。先看初始化对话框函数
BOOL CTargetStateDialog::OnInitDialog()
{
CDockableForm::OnInitDialog();
//将tab control控件与其他对话框关联起来(比如:目标轨迹对话框,目标注释对话框)
m_tabCtrl.InsertItem(0,_T("目标轨迹"));
m_tabCtrl.InsertItem(1,_T("目标注释"));
m_tabCtrl.InsertItem(2,_T("数据库相关操作")); m_targetTrackDlg->Create(IDD_TARGET_STATE_DIALOG,GetDlgItem(IDC_TARGET_STATE_TAB));    //&m_tabCtrl);      //look    
CRect rc;    GetClientRect(&rc);
      

m_tabCtrl.MoveWindow(&rc); m_tabCtrl.GetClientRect(&rc);
rc.bottom-=30; m_tabCtrl.MoveWindow(&rc);
   
m_targetTrackDlg->ShowWindow(TRUE);

  
    m_tabCtrl.SetCurSel(0);   // //设置默认的选项卡 return TRUE;               // 除非将焦点设置到控件,否则返回 TRUE
}
void CTargetStateDialog::OnSize(UINT nType, int cx, int cy)
{
CDockableForm::OnSize(nType, cx, cy);
    //对tab control控件及主对话框上面的对话框进行处理wm_size消息
if(m_tabCtrl.GetSafeHwnd())
{
CRect rc;    GetClientRect(&rc);
      
m_tabCtrl.MoveWindow(&rc); m_tabCtrl.GetClientRect(&rc);

rc.bottom-=30;
   
m_targetTrackDlg->MoveWindow(&rc);

}
}
效果图为: 有图有图有图 有图有真相,有图有真相

解决方案 »

  1.   

    绿色的是子对话框, 中间灰白那块是tab control ,为什么子对话框的区域居然比tab control还多?这是为什么啊??我在子对话框里面添加了WM_Paint ,大家看看,问题到底出在哪里啊
      

  2.   

    ClientToScreen
    SetWindowPos试一下这两个函数
      

  3.   

            // 创建工具条.
    m_ToolBar.Create(this, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_TOOLTIPS |CBRS_FLYBY | CBRS_BORDER_BOTTOM );
    //装载工具条资源
    m_ToolBar.LoadToolBar(IDR_MAIN_TOOLBAR) ;
    RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, 0); //添加选项卡
    m_Tab.InsertItem(0, _T(" 目标轨迹 "));

    //关联对话框,并且将IDC_TAB控件设为父窗口
    m_Concord.Create(IDD_CONCORD_DIALOG,GetDlgItem(IDC_MAIN_TAB));
    //获得IDC_TABMAIN客户区大小
    CRect rs;
    m_Tab.GetClientRect(&rs);
    //调整子对话框在父窗口中的位置
    rs.top+=22;       //+下降
    rs.bottom-=2;    //-上升
    rs.left+=1; 
    rs.right-=12;
    //设置子对话框尺寸并移动到指定位置
    m_Concord.MoveWindow(&rs);
    //分别设置隐藏和显示
    m_Concord.ShowWindow(TRUE);
    //设置默认的选项卡
    m_Tab.SetCurSel(0); 
      

  4.   

    OnSize()消息:
    CDialog::OnSize(nType, cx, cy);
    RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, 0 );  //工具栏
    m_Resize.OnSize(cx,cy);  //这是一个EasySize类,用于主窗口Tab的自动缩放。
    //手动缩放Tab控件的各个标签页(对话框)
    CRect rect;
    GetClientRect( &rect );
    if( IsWindowVisible() ) {
    m_Concord.MoveWindow(rect.left+1, 21, rect.right-rect.left-218, cy-100, TRUE);  //标签窗口一
    }
      

  5.   

    // ResizeControl.h: interface for the CResizeControl class.
    //
    //////////////////////////////////////////////////////////////////////#if !defined(AFX_RESIZECONTROL_H__5F3BB72F_1190_4B42_A57A_3BFC83AFC3C3__INCLUDED_)
    #define AFX_RESIZECONTROL_H__5F3BB72F_1190_4B42_A57A_3BFC83AFC3C3__INCLUDED_#if _MSC_VER > 1000
    #pragma once
    #endif // _MSC_VER > 1000
    #include "afxtempl.h" 
    typedef struct _tagResize
    {
    UINT ID;
    CRect rt;
    int type1;
    int type2;
    }tagResize;
    enum{PK_TOP_LEFT,PK_TOP_RIGHT,PK_BOTTOM_LEFT,PK_BOTTOM_RIGHT};class CResizeControl  
    {
    public:
    void SetResize(UINT ID,int type1,int type2);
    void OnSize(int cx,int cy);
    void SetOwner(CWnd *pWnd);
    CResizeControl();
    virtual ~CResizeControl();private:
    CWnd *m_pWnd;
    CArray <tagResize, tagResize>m_arrResize;
    CRect m_rtParent;};#endif // !defined(AFX_RESIZECONTROL_H__5F3BB72F_1190_4B42_A57A_3BFC83AFC3C3__INCLUDED_)
      

  6.   

    你的m_tab控件是声明的控件变量吗?
      

  7.   

    为你的tab控件添加控制变量m_tap,而不是主对话框的变量,
    //关联对话框,并且将IDC_TAB控件设为父窗口
        m_Concord.Create(IDD_CONCORD_DIALOG,GetDlgItem(IDC_MAIN_TAB));确保IDD_CONCORD_DIALOG是子对话框ID,IDC_MAIN_TAB为tab控件ID。
      

  8.   

    子窗体的style改成child模式了吗?