例如 我在Ondraw函数中绘制了一个矩形,在窗口变大时,如何使这个矩形相对窗口的位置不变

解决方案 »

  1.   

    1.自己算。
    2.如果是在控件上绘制的话建议使用EasySize
      

  2.   

    当窗口改变时,会响应WM_SIZE消息,然后你根据前后窗口大小比例,改变矩形大小,重绘就行了。
      

  3.   

    自己计算比例,然后MoveWindow/SetWindowPos到正确位置上
      

  4.   

    以下代码是我在窗口大小改变时调整控件位置的代码
    你可以参考一下
    void CAutoFitDlg::OnSize(UINT nType, int cx, int cy)
    {
    //计算窗口宽度和高度的改变量
        int nIncrementX = cx - m_nWinWidth;
        int nIncrementY = cy - m_nWinHeight; INT_PTR nCount = m_listCtrlTag.GetSize();    for (int i=0; i<nCount; i++)
        {
    //获取变化控制系数
    int nMoveXPercent = m_listCtrlTag[i]->m_nMoveXPercent;
    int nMoveYPercent = m_listCtrlTag[i]->m_nMoveYPercent;
    int nZoomXPercent = m_listCtrlTag[i]->m_nZoomXPercent;
    int nZoomYPercent = m_listCtrlTag[i]->m_nZoomYPercent;        CWnd* pWndCtrl;
    //获取控件指针
    pWndCtrl = m_listCtrlTag[i]->m_pWnd;        if(IsWindow(pWndCtrl->GetSafeHwnd()))
            {
                int nLeft = m_listCtrlTag[i]->m_rectWnd.left;
                int nTop = m_listCtrlTag[i]->m_rectWnd.top;
                int nWidth = m_listCtrlTag[i]->m_rectWnd.Width();
                int nHeight = m_listCtrlTag[i]->m_rectWnd.Height(); //设置新的位置参数
    nLeft += (nIncrementX*nMoveXPercent/100);
    nTop += (nIncrementY*nMoveYPercent/100);
    nWidth += (nIncrementX*nZoomXPercent/100);
    nHeight += (nIncrementY*nZoomYPercent/100);            //  把控件移动到新位置
    pWndCtrl->MoveWindow(nLeft, nTop, nWidth, nHeight);
    }
    } CDialog::OnSize(nType, cx, cy);
    }
      

  5.   

    如果你又一张绘制的底图了,仅仅需要往前台贴,那么就简单了
    每次绘制的时候,不要用bltbit,用strebltbit……,可能拼写有错误,就是缩放啦如果你不想缩放,那么就要考虑界面对齐的问题,所有的界面元素(控件)定义一个对其规则,是左上,还是右上,还是居中等等,最好还是自己处理一下,这样子界面不变型,不花不模糊
      

  6.   

    如果使用 wtl 的话, 有一个 sizedialog, 直接使用,所有你希望变的就都会自动变了,有按照比例变,和按照位置变两种
    http://www.codeproject.com/KB/wtl/wtldlgresize.aspx
    强大的刚刚的