对于单个控件我可以实现,但就是面对界面上好几个控件,就有点抓虾了
比如,文本框需要放大而topleft不动;按钮之类的只需要改变位置,同时还要考虑按钮和文本框的间距请问各位高手有什么好的办法没

解决方案 »

  1.   

    不懂,反正我一直是在OnSize里进行调整
    各个控件根据情况重新设置大小和位置
      

  2.   

    void CYourDlg::OnSize(UINT nType, int cx, int cy) 中实现
    例如: CRect rect;
    GetWindowRect(&rect);
    int wd = rect.Width();
    int ht = rect.Height(); //时钟位置
    CWnd *pStaticTime = GetDlgItem(IDC_STATIC_TIME);//只有一个顶层子窗口
    if(pStaticTime != NULL)
    {
    pStaticTime->ScreenToClient(&rect);
    pStaticTime->SetWindowPos(NULL, 0, 0, 148,50,//200, 60,
    SWP_NOZORDER | SWP_NOACTIVATE);
    } //log list pos
    CWnd *pLoglist = GetDlgItem(IDC_LIST_LOG);
    if(pLoglist != NULL)
    {
    pLoglist->ScreenToClient(&rect);
    pLoglist->SetWindowPos(NULL,0,400,148,ht-406,
    SWP_NOZORDER | SWP_NOACTIVATE);
    }

    //tab控件位置
    CWnd *pTab = GetDlgItem(IDC_TAB_ROOM_GROUP);//只有一个顶层子窗口
    if(pTab != NULL)
    {
    pTab->ScreenToClient(&rect);
    pTab->SetWindowPos(NULL, 150, 0, wd-150, 22,//高22
    SWP_NOZORDER | SWP_NOACTIVATE);
    }

    //房间列表位置
    CWnd *pRoomList = GetDlgItem(IDC_LIST_ROOM); 
    if(pRoomList != NULL)
    {
    pRoomList->ScreenToClient(&rect);
    pRoomList->SetWindowPos(NULL, 150, 22, wd-150, ht-280,
    SWP_NOZORDER | SWP_NOACTIVATE);
    } //三个按扭
    CWnd *pFilter = GetDlgItem(IDC_BT_FILTER); 
    if(pFilter != NULL)
    {
    pFilter->ScreenToClient(&rect);
    pFilter->SetWindowPos(NULL, 210, ht-255 , 75, 22,
    SWP_NOZORDER | SWP_NOACTIVATE);
    }
    CWnd *pIconMode = GetDlgItem(IDC_BT_ICONMODE); 
    if(pIconMode != NULL)
    {
    pIconMode->ScreenToClient(&rect);
    pIconMode->SetWindowPos(NULL, 310, ht-255 , 75, 22,
    SWP_NOZORDER | SWP_NOACTIVATE);
    }
    CWnd *pRefresh = GetDlgItem(IDC_BT_REFRESH); 
    if(pRefresh != NULL)
    {
    pRefresh->ScreenToClient(&rect);
    pRefresh->SetWindowPos(NULL, 410, ht-255 , 75, 22,
    SWP_NOZORDER | SWP_NOACTIVATE);
    } CWnd *pAutoRefresh = GetDlgItem(IDC_CHECK_AUTOREFRESH); 
    if(pAutoRefresh != NULL)
    {
    pAutoRefresh->ScreenToClient(&rect);
    pAutoRefresh->SetWindowPos(NULL, 510, ht-255 , 75, 22,
    SWP_NOZORDER | SWP_NOACTIVATE);
    }
    //消费列表
    CWnd *pCusumeList = GetDlgItem(IDC_LIST_CUSUME); 
    if(pCusumeList != NULL)
    {
    pCusumeList->ScreenToClient(&rect);
    pCusumeList->SetWindowPos(NULL, 150, ht-230, wd - 150, 228,
    SWP_NOZORDER | SWP_NOACTIVATE);
    }
      

  3.   

    这些都是相对位置,楼主可以参考这样:
    wd-150, ht-280
      

  4.   

    重写 OnSize(),正对各个空间单独布局
      

  5.   

    你可以在网上搜下EasySize  ...是h和cpp  2个文件 加进你工程,使用方法很简单  
      

  6.   

    我也知道在onsize里做,但就是向求一个简便的方法,否则一个一个的改控件的位置或大小很头疼的。貌似8楼的信息很有用
      

  7.   

    就用EasySize 吧,你只要在
    void CFirstPage::OnSize(UINT nType, int cx, int cy)
    {
    CXTPPropertyPage::OnSize(nType, cx, cy);
    UPDATE_EASYSIZE;
    // TODO: 在此处添加消息处理程序代码
    }加一句UPDATE_EASYSIZE;
    并把 要调整的控件 添加映射BEGIN_EASYSIZE_MAP(CFirstPage)
    EASYSIZE(ID_BUTTON1,ES_BORDER,ES_BORDER,ES_BORDER,ES_BORDER,0)
    EASYSIZE(IDC_LIST1,ES_BORDER,ES_BORDER,ES_BORDER,ES_BORDER,0)
    END_EASYSIZE_MAP就万事OK了
      

  8.   

    http://www.codeproject.com/KB/dialog/easysize.aspx
      

  9.   

    那个easysize可以在SDI工程里用么
      

  10.   

    看看这个对你有没有帮助
    http://blog.csdn.net/xianglitian/archive/2007/08/02/1722448.aspx