解决方案 »

  1.   

    http://download.csdn.net/detail/RobertBaker/3229976 
      

  2.   

    首先呀,得明确了,子窗口的大小用CreateRoundRectRgn函数确定,控件的位置及大小使用SetWindowPos确定,每个函数的关乎大小,位置的参数都是int型,就是说得需要一个明确的值。楼主想根据尺寸控件发生变化,就需要楼主在OnInitDialog里计算出具体值呀。自适应变化也是需要自适应算法的呀,微软的Windows到现在也没有做出楼主想要的,可见这不是一个简单的事。楼主看看360、金山等出的客户端程序、再到各个银行的网银助手客户端,不管哪个大小都是一定了。
      

  3.   


    真的那么复杂吗  mfc我刚接触 莫非我想多了
      

  4.   

    我不明白你的子父窗口有啥交互,但是子窗口的大小跟其控件的位置大小都是根据API函数自行设定的吧,那就需要你输入具体值呀,兄弟……
    就算托拉拽,也是MFC背后帮你做了这事,如果你想改动,就要自己来设。
      

  5.   

    在子窗口的OnSize中按照子窗口的尺寸调整其中控件的位置和尺寸
      

  6.   

    我还没做交互 我以为 主窗口发生变化 onsize能捕捉到并是子窗口做出程序规定的变化  
    那既然子窗口发生变化  那子窗口不是也应该响应其本身类中的onsize函数 从而使其控件像二楼的程序一样随之变化吗   下图是二楼的程序拖拽前后
      

  7.   

    我的子窗口的类中onsize就没调用
    我专门在子窗口的onsize中添加了 MessageBox(L"oo"); 结果拖拽父窗口 子窗口变化时就没显示任何消息
      

  8.   

    在父窗口的OnSize中调整子窗口的大小
    傻鸟,子窗口的OnSize有俅用啊
      

  9.   

    我想调节子窗口控件的位置  你有何高见再说一遍
    在父窗口的OnSize中
    用子窗口的MoveWindow调整子窗口的大小和位置
      

  10.   

    void CTest3View::OnSize(UINT nType, int cx, int cy)//父窗口改变尺寸,CTest3View为父窗口
    {
    CView::OnSize(nType, cx, cy); CRect r;
    GetClientRect(&r);
    r.DeflateRect(10,10,10,10);
    TxGroup.MoveWindow(&r,TRUE);//调整子窗口位置尺寸
    }void CxTestGroup::OnSize(UINT nType, int cx, int cy)//子窗口发生了尺寸改变//上述的TxGroup.MoveWindow(&r,TRUE)会自动引发本事件;
    {
    CWnd::OnSize(nType, cx, cy); CRect r;
    CRect r1;
    GetClientRect(&r);
    TxEd1.GetWindowRect(&r1);//调整各个控件位置尺寸
    ScreenToClient(&r1);
    r1.right=r.right-10;
    TxEd1.MoveWindow(r1,TRUE); TxEd2.GetWindowRect(&r1);
    ScreenToClient(&r1); r1.right=r.right-10;
    TxEd2.MoveWindow(r1,TRUE);
    // TODO: 在此处添加消息处理程序代码
    }
      

  11.   

    主对话框onsize
    void CMDialogDlg::OnSize(UINT nType, int cx, int cy)
    {
    CDialog::OnSize(nType, cx, cy); // TODO: 在此处添加消息处理程序代码
    //
    CWnd *pWnd;
    pWnd = GetDlgItem(IDD_DLG_SUB_TOP);     //获取控件句柄   
    GetClientRect(&m_rect);//获取父对话框尺寸
    m_DlgTop.DestroyWindow();// 子对话框top
    m_DlgCenter.DestroyWindow();//子对话框center
    m_DlgBottom.DestroyWindow();//子对话框bottom
    m_DlgTop.Create(IDD_DLG_SUB_TOP,this);
    m_DlgCenter.Create(IDD_DLG_SUB_CENTER,this);
    m_DlgBottom.Create(IDD_DLG_SUB_BOTM,this);
    m_DlgTop.SetWindowPos(pWnd,m_rect.left,m_rect.top,m_rect.Width(),m_rect.Height()*0.2,SWP_SHOWWINDOW);//看看与movewindow的区别
    //m_DlgTop.MoveWindow(m_rect.left,m_rect.top,cx,cy*0.2);
    m_DlgCenter.MoveWindow(m_rect.left,0.2*cy,cx,cy*0.8);
    m_DlgBottom.MoveWindow(m_rect.left,cy*0.8,cx,cy);
    m_DlgTop.ShowWindow(SW_SHOW);
    m_DlgCenter.ShowWindow(SW_SHOW);
    m_DlgBottom.ShowWindow(SW_SHOW);
    }
    这段代码能实现子窗口随父窗口调整大小    可子对话框m_DlgTop中的控件如何调整
    初学mfc 代码质量不高 见笑了
      

  12.   

    额 刚看到 感觉有效果 去试试  
    我的主对话框中会不会因为差了这句 而使子窗口onsize无反应
    TxGroup.MoveWindow(&r,TRUE);//调整子窗口位置尺寸
      

  13.   

    额 刚看到 感觉有效果 去试试  
    我的主对话框中会不会因为差了这句 而使子窗口onsize无反应
    TxGroup.MoveWindow(&r,TRUE);//调整子窗口位置尺寸你都不让子窗口改变,子窗口怎么可能有OnSize?
      

  14.   

    worldy  弱弱问一句 你代码中的 void 子窗口::onsize() 是放在子窗口类还是主窗口类中的?
     我无论放哪里都不好使
    在void 子窗口::onsize()中加了个messagebox 提示信息 都没执行 好像子窗口onsize还是没被引发
      

  15.   

    跟你们这种撮撮讲话真的很累
    这个范例专门写给你看
    如果不要缩放功能,只需要位置随动,就把scx,和scy直接=1http://download.csdn.net/detail/gz_qmc/6978801
      

  16.   

    哎,父窗口的onsize中按比例调整子控件大小呗
      

  17.   

    感谢各位 问题已经解决了 
    我把m_DlgTop定义为CDialog了 应该是CDlgTop来着 
    唉 基础不牢 回去翻书去了