最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

界面自适应屏幕分辨率

来源:动视网 责编:小OO 时间:2025-09-28 12:45:34
文档

界面自适应屏幕分辨率

 VC++控件自适应屏幕的方法收藏1.首先在初始化函数中,FormView在OnInitialUpdate(),Dialog在OnInitDialog()中初始化控件的大小。//开始初始化控件大小m_IsInitialed=false;CRectm_ClientRect;this->GetClientRect(&m_ClientRect);CSizem_Forsize;m_Forsize=GetTotalSize();//在资源编辑器中定好大小后,程序运行时大小(不管最大化和最小化,该大小均为
推荐度:
导读 VC++控件自适应屏幕的方法收藏1.首先在初始化函数中,FormView在OnInitialUpdate(),Dialog在OnInitDialog()中初始化控件的大小。//开始初始化控件大小m_IsInitialed=false;CRectm_ClientRect;this->GetClientRect(&m_ClientRect);CSizem_Forsize;m_Forsize=GetTotalSize();//在资源编辑器中定好大小后,程序运行时大小(不管最大化和最小化,该大小均为
  VC++控件自适应屏幕的方法 收藏 

1.首先在初始化函数中,FormView在OnInitialUpdate(),Dialog在OnInitDialog()中初始化控件的大小。

//开始初始化控件大小

 m_IsInitialed = false;

 CRect m_ClientRect;

this->GetClientRect(&m_ClientRect);

 CSize m_Forsize;

 m_Forsize = GetTotalSize();//在资源编辑器中定好大小后,程序运行时大小(不管最大化和最小化,该大小均为同一个值),客户区大于或等于显示的大小

 double m_x = (double)m_ClientRect.Width() / m_Forsize.cx;//宽度方向发大倍数

 double m_y = (double)m_ClientRect.Height() / m_Forsize.cy;//高度方向发大倍数

 //调整控件的大小

 CWnd *pWnd = NULL; 

 pWnd = GetWindow(GW_CHILD);

 while(pWnd)//判断是否为空,因为对话框创建时会调用此函数,而当时控件还未创建

 {

  CRect rect;   //获取控件变化前大小

pWnd->GetWindowRect(&rect);

  ScreenToClient(&rect);//将控件大小转换为在对话框中的区域坐标

m_ControlRect.insert(pair(pWnd->GetDlgCtrlID(), rect));//保存控件的初始大小,以便在OnSize函数中继续使用

  int width = rect.Width();

  int height = rect.Height();

  WCHAR szBuf[256];

GetClassName(pWnd->m_hWnd,szBuf,256);

  if( _tcsicmp(szBuf,_T("Edit")) == 0)   

  { 

   //Edit只是位置变化,大小没有变

   rect.top = m_y * rect.top;

   rect.left = m_x * rect.left;

   rect.bottom = rect.top + height;

   rect.right = rect.left + width;

  }

  else

  {

   //其它控件位置和大小均变化

   rect.top = m_y * rect.top;

   rect.left = m_x * rect.left;

   rect.bottom = m_y * rect.bottom;

   rect.right = m_x * rect.right;

  }

pWnd->MoveWindow(&rect);//设置控件大小

pWnd = pWnd->GetWindow(GW_HWNDNEXT);

 }

 

 //控件初始化结束

 m_IsInitialed = true;

2.如果界面在运行时大小可以改变,则在OnSize函数中加入如下代码

// TODO: 在此处添加消息处理程序代码

    CFormView::ShowScrollBar(SB_BOTH, false);//设置没有滚动条,视情况而定。

         //在界面不是最小化并且已经初始化完毕

    if (!IsIconic() && m_IsInitialed)

    {

        CSize m_Forsize;

        m_Forsize = GetTotalSize();

        double m_x = (double)cx / m_Forsize.cx;

        double m_y = (double)cy / m_Forsize.cy;

                //读取控件的初始大小

     map::iterator pos = m_ControlRect.begin();

        for (; pos != m_ControlRect.end(); ++pos)

        {

         CRect rect = pos->second;

            int width = rect.Width();

            int height = rect.Height();

            WCHAR szBuf[256];

         GetClassName(GetDlgItem(pos->first)->m_hWnd,szBuf,256);                 

            if( _tcsicmp(szBuf,_T("Edit")) == 0)   

            { 

                rect.top = m_y * rect.top;

                rect.left = m_x * rect.left;

                rect.bottom = rect.top + height;

                rect.right = rect.left + width;

            }

            else

            {

                rect.top = m_y * rect.top;

                rect.left = m_x * rect.left;

                rect.bottom = m_y * rect.bottom;

                rect.right = m_x * rect.right;

            }

         GetDlgItem(pos->first)->MoveWindow(rect);

        }

    }

或在OnShowWindow()函数中加入也可以(特别是在对话框作为tabpage时)

文档

界面自适应屏幕分辨率

 VC++控件自适应屏幕的方法收藏1.首先在初始化函数中,FormView在OnInitialUpdate(),Dialog在OnInitDialog()中初始化控件的大小。//开始初始化控件大小m_IsInitialed=false;CRectm_ClientRect;this->GetClientRect(&m_ClientRect);CSizem_Forsize;m_Forsize=GetTotalSize();//在资源编辑器中定好大小后,程序运行时大小(不管最大化和最小化,该大小均为
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top