如何让vc程序自动适应屏幕分辨率大小

时间:2022-12-09 06:06:11
大家好:
    想请教一下如何让vc++程序自动适应屏幕分辨率大小的问题。如我在1024x768状态下编写的程序在680x860分辨率下界面就显示不完全,有什么办法来处理吗?
    谢谢!
     

12 个解决方案

#1


可以改变自已程序的界面,将每个控件的位置都计算出来.  
  看下面这个例子,在窗口大小改变时,窗口里的控件也跟着调整位置.  
  void   CEmail::OnSize(UINT   nType,   int   cx,   int   cy)    
  {  
  CFormView::OnSize(nType,   cx,   cy);  
   
  //   TODO:   Add   your   message   handler   code   here  
  if(nType==SIZE_RESTORED   &&   cx>=522   &&   cy>=386)  
  {  
  CWnd   *pwnd;  
  CRect   rect;  
  pwnd=(CWnd   *)GetDlgItem(IDC_COMBO_CATALOG);  
  if(pwnd==NULL)return;  
  pwnd->GetWindowRect(&rect);  
  ScreenToClient(&rect);  
  rect.right=cx-15;  
  rect.left=rect.right   -   90;  
  pwnd->MoveWindow(&rect,TRUE);  
   
  pwnd=(CWnd   *)GetDlgItem(IDC_LIST);  
  if(pwnd==NULL)return;  
  pwnd->GetWindowRect(&rect);  
  ScreenToClient(&rect);  
  rect.right=cx-10;  
  rect.bottom=rect.top+cy/3+20;  
  pwnd->MoveWindow(&rect,TRUE);  
  ((CListCtrl   *)pwnd)->SetColumnWidth(1,   rect.Width()-274);  
   
  pwnd=(CWnd   *)GetDlgItem(IDC_RICHEDIT);  
  if(pwnd==NULL)return;  
  rect.top=rect.bottom+5;  
  rect.bottom=cy-10;  
  pwnd->MoveWindow(&rect,TRUE);  
  }  
  }

#2


这个你自己google一下啦,帮顶

#3


非常感谢大家的回复。这样定义每一个控件会很烦恼的哟,可否有一劳永逸的办法呢?谢谢!

#4


用EASYSIZE

#5


老兄 我也遇见了和你一样的问题 哎 好郁闷的哟  你解决了么?咱们一起讨论一下子撒?

#6


试试在每次画图形前重新定义一次虚拟坐标

#7


还没有解决哟,1楼的方法我试验后没有变化哟,不知道是什么原因呢?

#8


意思很简单,创建控件时不要用固定大小,要根据屏幕的大小,按比例来调整就行了.

#9


根据屏幕的大小,按比例来调整

#10


我觉得你们说 按比例这些东西  说的都很抽象  根本没有从本质上解决问题

我现在已经实现了在同一台电脑不同分辨率下  保证了圆都是正圆  可在不同比例的电脑下就不能保证是正圆了

#11


学习,我也想让程序适应屏幕分辨率大小。。。。

#12


你是用MFC写的还是直接用API写的啊。
如果你是用MFC写的,可以在建立对话框的时候,也就是OnInitDialog里面加上这名话。ShowWindow(SW_MAXIMIZE);如果不是的话,可以ShowWindow(m_hWnd,SW_MAXMINZE);你还可以获取屏幕的尺寸。
GetSystemMetrics(int nIndex);参数用SM_CXFULLSCREEN,SM_CYFULLSCREEN 全屏幕窗口的窗口区域的宽度和高度。就可以运用MoveWindow();方法比较多,LZ自己想想看那方法可以行得通。 

#1


可以改变自已程序的界面,将每个控件的位置都计算出来.  
  看下面这个例子,在窗口大小改变时,窗口里的控件也跟着调整位置.  
  void   CEmail::OnSize(UINT   nType,   int   cx,   int   cy)    
  {  
  CFormView::OnSize(nType,   cx,   cy);  
   
  //   TODO:   Add   your   message   handler   code   here  
  if(nType==SIZE_RESTORED   &&   cx>=522   &&   cy>=386)  
  {  
  CWnd   *pwnd;  
  CRect   rect;  
  pwnd=(CWnd   *)GetDlgItem(IDC_COMBO_CATALOG);  
  if(pwnd==NULL)return;  
  pwnd->GetWindowRect(&rect);  
  ScreenToClient(&rect);  
  rect.right=cx-15;  
  rect.left=rect.right   -   90;  
  pwnd->MoveWindow(&rect,TRUE);  
   
  pwnd=(CWnd   *)GetDlgItem(IDC_LIST);  
  if(pwnd==NULL)return;  
  pwnd->GetWindowRect(&rect);  
  ScreenToClient(&rect);  
  rect.right=cx-10;  
  rect.bottom=rect.top+cy/3+20;  
  pwnd->MoveWindow(&rect,TRUE);  
  ((CListCtrl   *)pwnd)->SetColumnWidth(1,   rect.Width()-274);  
   
  pwnd=(CWnd   *)GetDlgItem(IDC_RICHEDIT);  
  if(pwnd==NULL)return;  
  rect.top=rect.bottom+5;  
  rect.bottom=cy-10;  
  pwnd->MoveWindow(&rect,TRUE);  
  }  
  }

#2


这个你自己google一下啦,帮顶

#3


非常感谢大家的回复。这样定义每一个控件会很烦恼的哟,可否有一劳永逸的办法呢?谢谢!

#4


用EASYSIZE

#5


老兄 我也遇见了和你一样的问题 哎 好郁闷的哟  你解决了么?咱们一起讨论一下子撒?

#6


试试在每次画图形前重新定义一次虚拟坐标

#7


还没有解决哟,1楼的方法我试验后没有变化哟,不知道是什么原因呢?

#8


意思很简单,创建控件时不要用固定大小,要根据屏幕的大小,按比例来调整就行了.

#9


根据屏幕的大小,按比例来调整

#10


我觉得你们说 按比例这些东西  说的都很抽象  根本没有从本质上解决问题

我现在已经实现了在同一台电脑不同分辨率下  保证了圆都是正圆  可在不同比例的电脑下就不能保证是正圆了

#11


学习,我也想让程序适应屏幕分辨率大小。。。。

#12


你是用MFC写的还是直接用API写的啊。
如果你是用MFC写的,可以在建立对话框的时候,也就是OnInitDialog里面加上这名话。ShowWindow(SW_MAXIMIZE);如果不是的话,可以ShowWindow(m_hWnd,SW_MAXMINZE);你还可以获取屏幕的尺寸。
GetSystemMetrics(int nIndex);参数用SM_CXFULLSCREEN,SM_CYFULLSCREEN 全屏幕窗口的窗口区域的宽度和高度。就可以运用MoveWindow();方法比较多,LZ自己想想看那方法可以行得通。