//建立各属性页
m_tabPages[0]=new CAnswer;
m_tabPages[0]->Create(IDD_ANSWER,&m_Tab);//m_dialogAnswer.Create(IDD_ANSWER,&m_Tab);
//设置页面的位置在m_tablist控件范围内
CRect rc;
m_Tab.GetClientRect(&rc);
ScreenToClient(&rc);//ScreenToClient(rc);//ClientToScreen(
rc.top += 21;
rc.bottom -= 1;
rc.left += 1;
rc.right -= 1;
m_tabPages[0]->MoveWindow(rc);
m_tabPages[0]->ShowWindow(SW_SHOW);
哪里错了?

解决方案 »

  1.   

    ScreenToClient(&rc);
    ==>
    换成m_tabPages[0]->ClientToScreen(&rc);
      

  2.   

    你上面有这个m_tabPages[0]->Create(IDD_ANSWER,&m_Tab);//m_dialogAnswer.Create(IDD_ANSWER,&m_Tab);
    下面的那个
    ScreenToClient(&rc);//ScreenToClient(rc);//ClientToScreen(去掉
      

  3.   

    ScreenToClient(&rc);//ScreenToClient(rc);//ClientToScreen(
    去掉
      

  4.   

    ScreenToClient(&rc);//ScreenToClient(rc);//ClientToScreen(
    不用这行会怎么样
      

  5.   

    看错了,原来你的子窗口就是    m_tabPages[0]
    那应该用m_Tab.ClientToScreen
      

  6.   

    //建立各属性页
        m_tabPages[0]=new CAnswer;
        m_tabPages[0]->Create(IDD_ANSWER,&m_Tab);//m_dialogAnswer.Create(IDD_ANSWER,&m_Tab);
    //设置页面的位置在m_tablist控件范围内
    CRect rc;
    m_Tab.GetClientRect(&rc);
    m_Tab.ClientToScreen(&rc);rc.top += 21;
    rc.bottom -= 1;
    rc.left += 1;
    rc.right -= 1;
    m_tabPages[0]->MoveWindow(&rc,TRUE);
    m_tabPages[0]->ShowWindow(SW_SHOW);
    这样子还是不行了
      

  7.   

    ScreenToClient(&rc);//ScreenToClient(rc);//ClientToScreen(
    这个不需要。 你取的就是clientrect。 
      

  8.   

    看看这个
    http://blog.csdn.net/xianglitian/archive/2010/05/23/5618814.aspx
      

  9.   

    就是楼上们说的,
    楼主是不CAnswer 的实现有问题
      

  10.   


    // 这样是可以的,m_tab是CTabCtrl类对象,静态关联了CTabCtrl控件,CNewDlg是对话框,child,none风格
    m_tab.InsertItem(0, _T("AAA"), 0);
    CNewDlg* pDlg = new CNewDlg;
    pDlg->Create(IDD_DIALOG1, &m_tab);
    CRect rc;
    m_tab.GetClientRect(rc);

    rc.DeflateRect(30, 30);
    pDlg->MoveWindow(rc);
    pDlg->ShowWindow(SW_SHOW);
      

  11.   

    m_Tab.InsertItem(0,_T("test"));
    m_Tab.InsertItem(1,_T("test2")); m_dlg1.Create(IDD_DIALOG1,&m_Tab);
    //m_dlg1.
    CRect rc;
    m_Tab.GetClientRect(&rc);
    //m_Tab.ClientToScreen(&rc);rc.top += 21;
    rc.bottom -= 1;
    rc.left += 1;
    rc.right -= 1;
    m_dlg1.MoveWindow(&rc,TRUE);
    m_dlg1.ShowWindow(SW_SHOW);test ok!
    remember to set the dialog style to child! 
      

  12.   


    m_Tab.InsertItem(0,_T("test"));
    m_Tab.InsertItem(1,_T("test2"));
    m_dlg1= new CDialog;
    m_dlg1->Create(IDD_DIALOG1,&m_Tab);
    //m_dlg1.
    CRect rc;
    m_Tab.GetClientRect(&rc);
    //m_Tab.ClientToScreen(&rc);rc.top += 21;
    rc.bottom -= 1;
    rc.left += 1;
    rc.right -= 1;
    m_dlg1->MoveWindow(&rc,TRUE);
    m_dlg1->ShowWindow(SW_SHOW);public:
    CTabCtrl m_Tab;
    CDialog* m_dlg1;
    这样也可以
      

  13.   

    如果这个子窗口有WS_CHILD样式,那么直接用客户端坐标就可,否则就要用屏幕坐标
      

  14.   

    把子窗口的父窗口设置为TabCtrl,属性设置为none
      

  15.   

    子窗口属性设置为child解决问题,辛苦大家了!