我想让CStatusBar,CTreeCtrl,CListCtrl跟着对话框的拉伸一起变动,是要响应什么事件吗?代码在哪里添加呢?没有头绪,想请教

解决方案 »

  1.   

    一般是响应对话框的OnSize(WM_SIZE),然后计算好控件在对话框上的位置比例,重新对控件MoveWindow
      

  2.   

    我这一个基于对话框的程序,下有一个子对话框,ChildDialog,Style为child,上面有个CListCtrl,view为report,想让它跟着子对话框位伸,响应OnSize,在这个函数里面,我用GetWindowRect获取不到控件的区域,后来,我在头文件中增加一个CRect变量,在OnInitDialog里面获取了控件的大小,但转到OnSize后,数据又丢失了,所以现在的情况是编绎通过了,但只要一打开对话框,就被中断,得不到控件的大小,连对话框都打不开了,请问应该如何解决总题呢?
      

  3.   

    OnWindowPosChanged,在这里面写,dialog添加window消息
      

  4.   

    onsizegetclientwindow  movewindow
      

  5.   

    http://blog.csdn.net/zyrr159487/article/details/7011081
      

  6.   

    直接提供示例:http://www.codeproject.com/KB/dialog/easysize.aspx
    注册帐号后可以下载。
      

  7.   

    WM_SIZING/WM_SIZE消息中MoveWindow/SetWindowPos()子控件
      

  8.   

    BCG中有实现好的: CBCGPStaticLayout* pLayout = (CBCGPStaticLayout*)GetLayout();pLayout->AddAnchor(IDC_RECENT_FILES, CBCGPStaticLayout::e_MoveTypeNone, CBCGPStaticLayout::e_SizeTypeBoth);
      

  9.   

    我这里用了两套方法,第一个是研究楼上各位推荐的中文网站上最大化窗口之后,控件放大的方法,代码如下:
    在OnInitDialog中添加
            CRect rect;
    ::GetWindowRect(m_hWnd,rect);
    ScreenToClient(rect);
    m_nDlgWidth=rect.right-rect.left;
    m_nDlgHeight=rect.bottom-rect.top; m_nWidth=GetSystemMetrics(SM_CXSCREEN);
    m_nHeight=GetSystemMetrics(SM_CYSCREEN); m_Multiple_width=float(m_nWidth)/float(m_nDlgWidth);
    m_Multiple_height=float(m_nHeight)/float(m_nDlgHeight);
    然后在OnSize中实现:CWnd *pwd=GetDlgItem(IDC_LIST1);
    if(!pwd)
    return;
    CRect rect,recttemp;
    GetClientRect(&recttemp); rect.left=recttemp.Width()*ListRect.left/ChildRect.Width();
    rect.right=recttemp.Width()*ListRect.right/ChildRect.Width();
    rect.top=recttemp.Height()*ListRect.top/ChildRect.Height();
    rect.bottom=recttemp.Height()*ListRect.bottom/ChildRect.Height(); pwd->MoveWindow(rect,true);(以上是根据分辨率计算新的高度,编绎运行没有问题,但控件不见了)第二种方法跟上面原理一样,只是取POINT的方法,结果也是一样