控件大小随窗口变化( 可多个控件,增加了tab下窗口大小,CCombox不能下拉 )

来源:互联网 发布:java彩票合买系统搭建 编辑:程序博客网 时间:2024/04/29 03:03

控件大小随窗口变化( 可多个控件,增加了tab下窗口大小,CCombox不能下拉 )

//功能,调整控件大小位置

//来源:网上

//类型:笔记

//个人修改过 


 如果是里面只有一两个控件倒好办,但控件太多的话这样做是不是重复劳动太多了?


有没有更好的办法啊?

视类中加成员函数和成员变量:
        void   SetControlInfo(WORD   CtrlId); 
protected: 
        int   m_old_cx,m_old_cy; 
        CDWordArray   m_control_info; 
  
构造函数中初始化:
        m_old_cx   =   m_old_cy   =  0; 
  
加控件信息的函数定义:
void   CTestFormView::SetControlInfo(WORD   CtrlId) 

        m_control_info.Add(CtrlId); 
  

  


修改OnSize函数:
void   CTestFormView::OnSize(UINT   nType,   int   cx,  int   cy) 

        if(cx==0   ||   cy==0) 
        { 
                cx=800; 
                cy=600; 
        } 
        CFormView::OnSize(nType,   cx,   cy); 
        float   dx_percent   =   (m_old_cx  ==0)?   1   :   (float)((float)cx/(float)m_old_cx); 
        float   dy_percent   =   (m_old_cy  ==0)?   1   :     (float)((float)cy/(float)m_old_cy);
  
        if(m_old_cx) 
        { 
                CRect   WndRect; 
                CWnd   *pWnd; 
                for(int   i  =   0;   i   <   m_control_info.GetSize();   i++) 
                { 
                       pWnd   =   GetDlgItem(m_control_info[i]); 
                       if(!pWnd) 
                       { 
                               TRACE( "Control   ID   -  %d   NOT   FOUND!!\n ",m_control_info[i]); 


                               continue; 
                       } 
  
                       pWnd-> GetWindowRect(&WndRect); 
                       ScreenToClient(&WndRect); 
  
                       WndRect.left   =   (int)(WndRect.left*dx_percent); 
                       WndRect.right   =   (int)(WndRect.right*   dx_percent); 
                       WndRect.bottom   =   (int)(WndRect.bottom*dy_percent); 
                       WndRect.top   =   (int)(WndRect.top*dy_percent); 
  
                       pWnd-> MoveWindow(&WndRect); 
                } 
  
        } 
        m_old_cx   =   cx; 
        m_old_cy   =   cy; 

  
在OnInitialUpdate函数( 窗口的是OnInitDialog函数 )中加入控件ID:
        SetControlInfo(IDC_BUTTON1); 
            。。。。。。。。。。。。。。。。


  运行,搞定!
Dialog也一样!




//刚刚用了一下,问题又来了,如果是窗口在tab控件下面的怎么办,网上找了一下,没有找到,只到自己想咯,

//第二个想法就用上了


//修改下上面的函数

void   CTestFormView::OnSize(UINT   nType,   int   cx,  int   cy) 


                CRect   WndRect; 
                CWnd   *pWnd; 

        if(cx==0   ||   cy==0) 
        { 
                cx=800; 
                cy=600; 
        } 
        CFormView::OnSize(nType,   cx,   cy); 
        float   dx_percent   =   (m_old_cx  ==0)?   1   :   (float)((float)cx/(float)m_old_cx); 
        float   dy_percent   =   (m_old_cy  ==0)?   1   :     (float)((float)cy/(float)m_old_cy);
  
        if(m_old_cx) 
        { 

                for(int   i  =   0;   i   <   m_control_info.GetSize();   i++) 
                { 
                       pWnd   =   GetDlgItem(m_control_info[i]); 
                       if(!pWnd) 
                       { 
                               TRACE( "Control   ID   -  %d   NOT   FOUND!!\n ",m_control_info[i]); 


                               continue; 
                       } 
  
                       pWnd-> GetWindowRect(&WndRect); 
                       ScreenToClient(&WndRect); 
  
                       WndRect.left   =   (int)(WndRect.left*dx_percent); 
                       WndRect.right   =   (int)(WndRect.right*   dx_percent); 
                       WndRect.bottom   =   (int)(WndRect.bottom*dy_percent); 
                       WndRect.top   =   (int)(WndRect.top*dy_percent); 
  
                       pWnd-> MoveWindow(&WndRect); 
                } 
  
        } 
        m_old_cx   =   cx; 
        m_old_cy   =   cy; 




//tab子窗口大小

pWnd = GetDlgItem( IDC_SPORTLOGS_TAB0 );

if ( NULL != pWnd )

{

pWnd-> GetClientRect(&WndRect); 

 

m_tab_EveryDay.MoveWindow(&WndRect);; //每天活动

m_tab_ActivityReport.MoveWindow(&WndRect);; //活动报告

m_tab_CateGory.MoveWindow(&WndRect);; //类别

m_tab_equipment.MoveWindow(&WndRect);; //设备

m_tab_athletes.MoveWindow(&WndRect);;//运动员

m_tab_path.MoveWindow(&WndRect);; //路径

m_tab_internet.MoveWindow(&WndRect);;//上网

m_tab_set.MoveWindow(&WndRect);;//设置

}




//红色的为修改过的



//问题又来了,发现如果窗口大小改变过,那下拉框控件( CCombox )竟然下拉不了,查查MFC库详解,竟然没有调整这个的

//后来想想,由MoveWindow搞的,就由它来解决,修改上面代码后完成 ,如下:(红色部分为新修改)

void   CTestFormView::OnSize(UINT   nType,   int   cx,  int   cy) 


                CRect   WndRect; 
                CWnd   *pWnd; 

        if(cx==0   ||   cy==0) 
        { 
                cx=800; 
                cy=600; 
        } 
        CFormView::OnSize(nType,   cx,   cy); 
        float   dx_percent   =   (m_old_cx  ==0)?   1   :   (float)((float)cx/(float)m_old_cx); 
        float   dy_percent   =   (m_old_cy  ==0)?   1   :     (float)((float)cy/(float)m_old_cy);
  
        if(m_old_cx) 
        { 

                for(int   i  =   0;   i   <   m_control_info.GetSize();   i++) 
                { 
                       pWnd   =   GetDlgItem(m_control_info[i]); 
                       if(!pWnd) 
                       { 
                               TRACE( "Control   ID   -  %d   NOT   FOUND!!\n ",m_control_info[i]); 


                               continue; 
                       } 
  
                       pWnd-> GetWindowRect(&WndRect); 
                       ScreenToClient(&WndRect); 
  
                       WndRect.left   =   (int)(WndRect.left*dx_percent); 
                       WndRect.right   =   (int)(WndRect.right*   dx_percent); 
                       WndRect.bottom   =   (int)(WndRect.bottom*dy_percent); 
                       WndRect.top   =   (int)(WndRect.top*dy_percent); 
 if ( 14 == i  //对应的CCombox控件自定义数组下标

|| 15 == i

|| 21 == i 

|| 22 == i )

{

pWnd->MoveWindow( WndRect.left,

WndRect.top,

WndRect.Width(),

WndRect.Height() + 200,//+200表示下拉长度

TRUE );

}

else

{

                       pWnd-> MoveWindow(&WndRect); 

}

                } 
  
        } 
        m_old_cx   =   cx; 
        m_old_cy   =   cy; 




//tab子窗口大小

pWnd = GetDlgItem( IDC_SPORTLOGS_TAB0 );

if ( NULL != pWnd )

{

pWnd-> GetClientRect(&WndRect); 

 

m_tab_EveryDay.MoveWindow(&WndRect);; //每天活动

m_tab_ActivityReport.MoveWindow(&WndRect);; //活动报告

m_tab_CateGory.MoveWindow(&WndRect);; //类别

m_tab_equipment.MoveWindow(&WndRect);; //设备

m_tab_athletes.MoveWindow(&WndRect);;//运动员

m_tab_path.MoveWindow(&WndRect);; //路径

m_tab_internet.MoveWindow(&WndRect);;//上网

m_tab_set.MoveWindow(&WndRect);;//设置

}


0 0
原创粉丝点击