VC++控件自适应屏幕的方法

转载 2013年12月03日 16:59:20

文章来源:http://blog.csdn.net/ybw20041910/article/details/5679730

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<int, CRect>(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<int, CRect>::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);
		}
	}


android 控件的大小计算以及自适应屏幕的大小

由于android 的屏幕分辨率较多导致布局的时候控件有时会被拉伸,导致和原来的效果差别很大 ,这个时候就需要根据不同的屏幕来调节控件的大小,例如想要为CheckBox的控件根据屏幕设置大小 ...
  • qq_24458843
  • qq_24458843
  • 2016年08月15日 09:13
  • 1383

iOS 根据屏幕宽度自适应分布按钮

屏幕摆放的控件有两种方式,一种根据具体内容变化,一种根据屏幕宽度变化。 下面我分别将两个方式,用代码的方式呈现: 1:根据具体内容变化 // // StyleOneViewController....
  • Leemin_ios
  • Leemin_ios
  • 2016年11月15日 20:37
  • 1677

屏幕自适应的四种方法

 一、细说layout_weight     目前最为推荐的Android多屏幕自适应解决方案。     该属性的作用是决定控件在其父布局中的显示权重,一般用于线性布局中。其值越小,则对应的...
  • ronglian1234
  • ronglian1234
  • 2014年06月12日 09:02
  • 1407

改进C# WinForm窗体及其控件自适应各种屏幕分辨率

改进C# WinForm窗体及其控件自适应各种屏幕分辨率 一。说明   2012-11-30 曾经写过 《C# WinForm窗体及其控件自适应各种屏幕分辨率》  ,其中也讲解了控件自适应的原理。...
  • chengwei920412
  • chengwei920412
  • 2014年10月27日 11:11
  • 1277

Unity3d gui自适应屏幕

用Unity开发移动平台的游戏 不可避免的会遇到屏幕分辨率的问题 不同的分辨率上会使得原本正常的UI变得乱七八糟 我们知道 在Unity中可以拿一个plane作为背景 UI则是绘制在离摄像...
  • fzhlee
  • fzhlee
  • 2013年03月11日 11:48
  • 5085

4种必须知道的Android屏幕自适应解决方案

以下是Demo首页的预览图 demo下载:http://www.eoeandroid.com/forum.php?mod=attachment&aid=NjE0Njh8ZTI...
  • xiahao86
  • xiahao86
  • 2014年02月25日 16:45
  • 39231

控件坐标位置自适应算法

按照俺以前的做法是在gimp中算好背景图片资源的坐标及尺寸,但是这样做也不好,针对窗口的不同大小,不同的分辨率,控件就偏多很历害。 但是如果限制窗口不能调节大小,也不好,毕竟在大分辨率的屏幕屏上,客户...
  • shell_albert
  • shell_albert
  • 2015年01月23日 16:07
  • 492

MFC控件自适应窗口大小类

AutoAdapt.h #pragma once class CAutoAdapt { public: CAutoAdapt(void); virtual ~CAutoAdapt(void); ...
  • zhuhuibeishadiao
  • zhuhuibeishadiao
  • 2016年05月06日 20:52
  • 838

QT应用程序分辨率自适应

QT应用程序分辨率自适应一、应用程序分辨率自适应    为了满足应用程序能在不同尺寸及分辨率的屏幕下能够正常的运行显示,就需要对不同的分辨率进行自适应,而且应用程序分辨率自适应的问题在应用UI设计布局...
  • matengxiao
  • matengxiao
  • 2016年10月18日 21:57
  • 6768

Qt中如何让控件自适应窗口大小

Qt中如何让控件自适应窗口大小 2016.9.19 在将PC上的代码移植到nanopi上的过程中发现在小屏上不能完全显示画面,所以现在来研究一下如何让控件和窗口自适应大小。 2016.9.26 看了资...
  • Lbb2016
  • Lbb2016
  • 2016年09月26日 16:15
  • 9282
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:VC++控件自适应屏幕的方法
举报原因:
原因补充:

(最多只允许输入30个字)