要在父窗口里创建一个子窗口,
关键代码如下:m_child.Create(GetDlgItem(IDC_PARENT));问题是这样,创建子窗口之后,子窗口没能嵌到父窗口里,我拖动父窗口移动的时候,子窗口一动不动啊。
经过旧帖,答案为将子窗口的style设置为child。但是现在新的问题又来了,如果讲style设置为child,子窗口就显示不了了。

解决方案 »

  1.   

    1、子窗口的style设置为Child;Border设置为None;
    2、m_child.Create(子对话框ID,GetDlgItem(IDC_PARENT));
       m_child.ShowWindow(SW_SHOW);//显示对话框
    注意,此时要确保控件或窗口IDC_PARENT是可见的。
      

  2.   

    跟上面的步骤一摸一样,IDC_PARENT也是可见的,现在的情况就是只显示了IDC_PARENT.
    我当前的IDC_PARENT是一个tab控件。
      

  3.   

    弄过wtl的同学进来看看啊,刚出炉的wtl问题,窗口,子窗口,不显示!
      

  4.   

    肯定了,child就会跟着父窗口到这到那的,popup就自己独立与父窗口客户区了
      

  5.   

    所以要设为child,父窗口可见,子窗口才能可见
      

  6.   

    m_child.Create(子对话框ID,父对话框窗口指针);//这样改试试
      

  7.   

    不行啊,编译会报错。create那个函数的原型是这样的,Create(HWND,LPARAM)。
      

  8.   

    如果不把子窗口设置为child,而是设置为popup,子窗口可以显示,但是不随父窗口移动而移动
    如果把子窗口设置为child,则只显示父窗口,而不显示子窗口
      

  9.   

    你可以把工程做个demo 发出来调试下就知道了,没代码很难看出你什么问题的
    有可能是你其他地方造成的呢
      

  10.   

    就是我建的一个对话框类,继承自
    public CDialogImpl<CAccountSet>,
    public CWinDataExchange<CAccountSet>
      

  11.   

    public CDialogImpl<CAccountSet>,
    public CWinDataExchange<CAccountSet>
    没看懂是什么意思?能再说的清楚一点吗?m_child的类为什么不直接继承自CDialog类啊?
      

  12.   

    这个是wtl,不是MFC,所以没有CDialog这个类,那个CDialogImpl基本就相当于CDialog
      

  13.   

    谢谢你的建议,我刚才做了个demo,结果发现demo是正常的。
    比较之下,发现我现在的程序比demo多了一段代码,就是为了调整窗口位置而写的MoveWindow(),
    可是如果我不写movewindow,就不能调整子对话框的位置,让它刚好显示在我的tab里面。
      

  14.   

    猜测是movewindow函数参数的问题,传递正确的rect。
      

  15.   

    恩,是的,有可能是rect的问题
      

  16.   


                   // 获得tab的客户区大小
    RECT rs;
    m_tab.GetClientRect(&rs); // 调整子窗口在父窗口中的位置
    rs.left   += 463;
    rs.top    += 213;
    rs.right  += 471;
            rs.bottom += 193; //设置子对话框尺寸并移动到指定位置
    m_child.MoveWindow(&rs);
      

  17.   

    这样写: CRect rectTab;
    m_tab.GetWindowRect(&rectTab);
    ScreenToClient(&rectTab);
    m_child.SetWindowPos(NULL,rectTab.left+5,rectTab.top+30,0,0,SWP_SHOWWINDOW|SWP_NOSIZE);
      

  18.   

       
           // 获得tab的客户区大小
            RECT rs;
            m_tab. GetWindowRect (&rs);
            ScreenToClient(&rs);        // 调整子窗口在父窗口中的位置
            rs.left   += 463;
            rs.top    += 213;
            rs.right  += 471;
            rs.bottom += 193;        //设置子对话框尺寸并移动到指定位置
            m_child.MoveWindow(&rs);    
      

  19.   

    谢谢楼上的两位,加了ScreenToClient之后就OK了。这个程序是我照这一个MFC的示例代码写的,不知道这点上是有什么区别,MFC的那个程序里,是没有ScreenToClient的。不过现在总算OK了,照猫画虎,果然还是不行的。谢谢二位,非常感谢!
      

  20.   


    MFC代码转到WTL是有些差别的,虽然不大,但还是有,WTL比MFC简单,MFC比WTL现成的多。