我在做VC的界面,遇到一个问题,就是CDialog的对话框,不能很好的嵌在CTabCtrl中,
代码如下,帮忙看一下了void ControlPlane::OnInitialUpdate() 
{
CFormView::OnInitialUpdate();

// TODO: Add your specialized code here and/or call the base class
TCITEM item;
item.mask = TCIF_TEXT;
item.pszText = "Create";
m_TabCtrl.InsertItem (0,&item);
item.pszText = "Modife";
m_TabCtrl.InsertItem (1,&item);

m_CreateTab.Create (IDD_TAB_CREATE,&m_TabCtrl);
m_ModifeTab.Create (IDD_TAB_MODIFE,&m_TabCtrl);
CRect rc;
m_TabCtrl.GetWindowRect(rc);
rc.top = rc.top + 2;
rc.left = rc.left + 2;
rc.right = rc.right - 2;
rc.bottom = rc.bottom - 2;
int cx = rc.right - rc.left;
int cy = rc.bottom - rc.top;        //问题
m_CreateTab.SetWindowPos(NULL,rc.top,rc.left,rc.right,rc.bottom,SWP_SHOWWINDOW);
        //替换部分
         //m_CreateTab.ShowWindow(WS_SHOW);
}这个就是问题的代码,问题出现在最后两行,如果换成地下的那一行   m_CreateTab.ShowWindow(WS_SHOW); 倒是可以显示,但是位置不对,Dailog把标签给盖住了,如果换成上面的那一行,就跟不显示不出来Dialog了,怎么办呢?

解决方案 »

  1.   

    首先GetWindowRect获取的是相对屏幕的坐标;其次,SetWindowPos第一个参数指定一下。其实用MoveWindow就可以了,当然这个位置要去掉Tab上面的部分。
      

  2.   


        //add items into tabcontrol
        m_ctrltab.InsertItem(0,"  学校");
        m_ctrltab.InsertItem(1,"  学年");    //add the page into tabcontrol
        m_dlgpageschool.Create(IDD_DLGSCHOOL, &m_ctrltab);
        m_dlgpageyear.Create(IDD_DLGYEAR, &m_ctrltab);    //show the first page
        CRect  recttab;
        m_ctrltab.GetClientRect(&recttab);
        recttab.top += 20;    m_dlgpageschool.MoveWindow(&recttab);
        m_dlgpageyear.MoveWindow(&recttab);    m_dlgpageschool.ShowWindow(SW_SHOW);
        m_dlgpageyear.ShowWindow(SW_HIDE);
    //我用过的代码,看看或许会有帮助
      

  3.   


    void ControlPlane::OnInitialUpdate() 
    {
    CFormView::OnInitialUpdate();

    // TODO: Add your specialized code here and/or call the base class
    TCITEM item;
    item.mask = TCIF_TEXT;
    item.pszText = "Create";
    m_TabCtrl.InsertItem (0,&item);
    item.pszText = "Modife";
    m_TabCtrl.InsertItem (1,&item);

    m_CreateTab.Create (IDD_TAB_CREATE,&m_TabCtrl);
    m_ModifeTab.Create (IDD_TAB_MODIFE,&m_TabCtrl);
    CRect rc;
    m_TabCtrl.GetWindowRect(rc);
    rc.top = rc.top + 20; this->m_CreateTab.MoveWindow(rc);
    this->m_CreateTab.ShowWindow(SW_SHOW);
    }
    改成这个样子了,那个对话框显示不出来了
      

  4.   

        m_CreateTab.MoveWindow(rc);
        m_ModifeTab.MoveWindow(rc);    m_CreateTab.ShowWindow(SW_SHOW);
        m_ModifeTab.ShowWindow(SW_HIDE);//这样也不行么?
      

  5.   

    [email protected]//方便的话发给我调试看看
      

  6.   

    怎么不用 CPropertySheet 与 CPropertyPage
      

  7.   

    m_CreateTab.SetWindowPos(m_CreateTab.wndTop,rc.top,rc.left,rc.right,rc.bottom,SWP_SHOWWINDOW); 
           
      

  8.   

    CRect rc;
        m_TabCtrl.GetWindowRect(rc);
        rc.top = rc.top + 20;    this->m_CreateTab.MoveWindow(rc);
    -----------------------
    GetWindowRect?获得的是屏幕坐标,你用这个坐标MoveWindow早就移出TAB的范围了,ScreenToClient转一下坐标
      

  9.   


    void ControlPlane::OnInitialUpdate() 
    {
        CFormView::OnInitialUpdate();
        
        // TODO: Add your specialized code here and/or call the base class
        TCITEM item;
        item.mask = TCIF_TEXT;
        item.pszText = "Create";
        m_TabCtrl.InsertItem (0,&item);
        item.pszText = "Modife";
        m_TabCtrl.InsertItem (1,&item);
        //在这里添加如下代码
        CWnd *pWnd=NULL;
        pWnd=GetDlgItem(IDC_YOUR_TAB);

        m_CreateTab.Create (IDD_TAB_CREATE,&m_TabCtrl);
        //指定父亲窗口
         m_CreateTab.setParant(pWnd);
        m_ModifeTab.Create (IDD_TAB_MODIFE,&m_TabCtrl);
        m_ModifeTab.setParant(pWnd);
        CRect rc;
        m_TabCtrl.GetWindowRect(rc);
        rc.top = rc.top + 20;    this->m_CreateTab.MoveWindow(rc);
        this->m_CreateTab.ShowWindow(SW_SHOW);
    }问题似乎出现在create();中指定的父亲窗口那里不起作用。具体不知道为什么。
      

  10.   

    刚开始初始化时,不用获得矩形信息,也就是说把下面注释掉的去掉就行了
    /*
    CRect rc; 
    m_TabCtrl.GetWindowRect(rc); 
    rc.top = rc.top + 2; 
    rc.left = rc.left + 2; 
    rc.right = rc.right - 2; 
    rc.bottom = rc.bottom - 2; 
    int cx = rc.right - rc.left; 
    int cy = rc.bottom - rc.top; 
    */然后加上下面语句,虽然位置可能不太准确,但只需调试相应的数据就行了,我刚用过该控件,还是好用的
    m_CreateTab.SetWindowPos(NULL,3,34,1200,400,SWP_SHOWWINDOW);   
        
      

  11.   

    知道怎样把文本文档的数据添加到EXCLE表格吗?
    文本数据格式如下:
    时间        频率        长度            高度
    2008-1-1  345.123     329.987      1287.988
    下面还有很多类似数据,导入到表格后根据频率范围差不多的进行查询,比如在329左右的频率筛选出来,大虾们,帮帮忙吧,有代码的发到[email protected]