各位大侠:
    我的问题见标题,最好还随便告诉我窗口(对话框)中组件(比如一个按钮)的大小如何随窗口大小的改变而改变,非常感谢!

解决方案 »

  1.   

    工具栏你可以建立多个工具栏   不同分辨率加载不同的资源至于控件  帮你写了个类似的东西
    InitDialog  中://获取未放大前对话框大小
            CRect rect;
    ::GetWindowRect(m_hWnd,rect);
    ScreenToClient(rect);
    m_nDlgWidth = rect.right - rect.left;
    m_nDlgHeight = rect.bottom - rect.top;
    //窗口最大化,并取得分辨率大小,根据此大小设置控件字体大小
    ShowWindow(SW_MAXIMIZE);
    m_nWidth = GetSystemMetrics(SM_CXSCREEN);
    m_nHeight = GetSystemMetrics(SM_CYSCREEN);
    //算出放大倍数,并记录  假设1280*1024  1024*768  800*768  三个分辨率
    m_fWidthMul = float(m_nWidth)/float(m_nDlgWidth);
    m_fHeightMul = float(m_nHeight)/float(m_nDlgHeight);
            //三种分辨率下设置三种字体,加载不同工具栏
    if (m_nWidth >= 1279)
    {
    m_newFont.CreateFont(26,0,0,0,FW_NORMAL,0,0,0,1,OUT_DEFAULT_PRECIS,
    CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH | FF_SWISS,_T("宋体"));
    m_nToolBarID = IDR_TOOLBAR1;
    }
    else
    {
    if (m_nWidth >= 1000)
    {
       m_newFont.CreateFont(16,0,0,0,FW_NORMAL,0,0,0,1,OUT_DEFAULT_PRECIS,
       CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH | FF_SWISS,_T("宋体"));
       m_nToolBarID = IDR_TOOLBAR2;
    }
    else
    {
       m_newFont.CreateFont(12,0,0,0,FW_NORMAL,0,0,0,1,OUT_DEFAULT_PRECIS,
       CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH | FF_SWISS,_T("宋体"));
       m_nToolBarID = IDR_TOOLBAR3;
    }
    }        ReSize(控件ID)//有多少个控件 调用多少次resize
    类中添加一个函数  ReSize(int nID)
    CRect AimRect;
    GetDlgItem(nAimID)->GetWindowRect(AimRect);
    ScreenToClient(AimRect);
    //记录这个区域的左上角点和右下角点
    CPoint OldTLPoint,AimTLPoint;
    OldTLPoint = AimRect.TopLeft();
    AimTLPoint.x = long(OldTLPoint.x *m_fWidthMul);
    AimTLPoint.y = long(OldTLPoint.y *m_fHeightMul);
    CPoint OldLRPoint,AimLRPoint;
    OldLRPoint = AimRect.BottomRight();
    AimLRPoint.x = long(OldLRPoint.x *m_fWidthMul);
    AimLRPoint.y = long(OldLRPoint.y *m_fHeightMul);
    //根据分辨率设置字体,LeftTree的里面的字体大小不变
    GetDlgItem(nAimID)->SetFont(&m_newFont);
    //在放大的窗口里,重绘放大后的窗口
    AimRect.SetRect(AimTLPoint,AimLRPoint);
    GetDlgItem(nAimID)->MoveWindow(AimRect,TRUE);
      

  2.   

    试试这个:
    CToolBar::SetSizes(SIZE sizeButton,SIZE sizeImage)
    我想不用介绍,朋友们也都能猜出这个函数的功能了吧.它用于设置工具按钮的大小以及它上面的位图的大小.这个函数有两个参数,其中,sizeButton用于指定按钮的大小,sizeImage用于指定位图的大小.需注意的是:这两个参数的cx域和cy域都必须大于零,并且,sizeButton的宽度(cx)至少要比sizeImage的宽度大7,高度(cy)至少大6.
      

  3.   


    首先处理窗口的WM_SIZEX消息,然后:
    ...........OnSize(.....)
    {HWND hWnd = your control; void OnSize() 

      if (::IsWindow(hWnd)) 
      { 
        // 计算Tree控件的大小 
         // 调用MoveWindow改变其大小 
        ::MoveWindow(hWnd,....); 
      } 
    }}
      

  4.   

    本帖最后由 laiyiling 于 2008-04-22 20:48:13 编辑
      

  5.   

    我补充个问题,麻烦哪位大侠告诉我下。
    我向对话框中添加了一个Botton类按钮,并在OnSize里面用MoveWindow函数控制它的位置(因为我要让该按钮随对话框的大小的改变而改变),在OnSize函数里面我又添加了对于按钮标题的控制,因为按钮的大小改变后,我要改变相应的标题字数(我假设的是标题很长,按钮显示不下来,显示不下来的那部分就用“...”代替),这功能虽然实现了,但是在拖拉对话框的时候,按钮一直在闪的,这样让人看着很不爽,我估计是大小改变的,一直在刷新造成的,不知道谁有好的办法可以避免这个问题,本人的QQ 61889058,知道的可以联系我,如果有类似代码的话麻烦发我QQ邮箱,非常感谢