控件自适应对话框大小
来源:互联网 发布:mac 黑苹果安装驱动 编辑:程序博客网 时间:2024/06/05 22:47
总结1:由于目前开发的程序只是在实验室内部使用,其使用的显示器都是实验室自己订购的同一个型号(分辨率为1024*768),因此可以考虑开发程序时将开发环境的分辨率设置与使用环境一样(即1024*768),这样就不存在由于开发环境与使用环境的不一样而导致的对话框自适应分辨率问题了。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
http://topic.csdn.net/u/20110811/15/66A1AE57-6EA9-4A58-8BFD-6D74E3781BA9.html
A:我写了一个基于对话框的应用程序,但是当我把分辨率调到800*600后,发现对话框界面没有完整地显示出来。请教各位如何解决这个问题呢?有些软件不管你的分辨率怎么变化,对话框最大化后都能刚好不多不少地铺满整个屏幕。
wltg2001:开始的时候取得屏幕的大小,让对话框的大小和屏幕相关。
Delphigis:都是硬写的,没有捷径
不过有些是可以取巧的
比如最小设定是800*600(现在比这个还小的不好找了)
比如当界面分辨率大于1024*768时,你采用统一格式
这样其实你只要排2个版面就可以了
如果适应任意分辨率,则考虑界面的某个部分是指定宽度或高度,其它部分再自动适应
g6785654:你可以用全屏显示,也可以下面这样
- int x = GetSystemMetrics(SM_CXSCREEN); //获取屏幕X像素
- int y = GetSystemMetrics(SM_CYSCREEN); //获取屏幕Y像素
- //然后在通过MoveWindow来固定位置和大小
- MoveWindow(x/2-269,y/2-260,530,560,NULL); //里面的参数是MoveWindow(x,y,width,height,NULL);
int x = GetSystemMetrics(SM_CXSCREEN); //获取屏幕X像素 int y = GetSystemMetrics(SM_CYSCREEN); //获取屏幕Y像素//然后在通过MoveWindow来固定位置和大小MoveWindow(x/2-269,y/2-260,530,560,NULL); //里面的参数是MoveWindow(x,y,width,height,NULL);
你可以根据你获得不同桌面的x,y来确定自己的软件大小,下面是全屏的方法
这个写在OnInitDialog方法中就可以
dsc:来个更狠的,进程启动时强制将分辨率修改为指定大小(譬如800*600),进程退出时再恢复为原来大小。(crybird:用户体验会极为不爽,除了那些傻瓜用户)
maquan:先说个题外话,多数对话框都不支持调整尺寸,除非对话框内有动态布局管理的支持。楼主的对话框支持“最大化”,想必是有动态布局的吧?
说正题,楼主描述的情况,看上去有点歧义,先澄清一下,你的问题到底是下面两种情形的哪种:
1. 屏幕尺寸先是 1024x768,然后对话框最大化,然后调整屏幕尺寸为 800x600,发现对话框有一部分显示到屏幕外边了;
2. 对话框处于还原状态,调整屏幕尺寸为 800x600,然后对话框最大化,发现没有恰好占满整个屏幕;
两种情形的问题指向是不同的。
tianzhigang889:(作者本人)关于对话框适应不同分辨率问题基本已经解决了。主要分如下几步:
1.利用GetSystemMetrics(SM_CXSCREEN)函数获得当前屏幕的宽度和高度cx,xy。
2.分别判断分辨率大于或等于1024*768和分辨率只等于800*600的两种情况下就分别做如下处理。
3.利用MoveWindow()函数框定住对话框的大小。对话框的大小自己定,只要大小不超出cx和cy。比如可以这样做cx-300,cy-200,这样,在任何分辨率下,你的对话框的大小都比屏幕小,而不会跑到屏幕外边去。
4.利用ShowWindow(SW_SHOWMAXIMIZED)函数设置全屏
4.在OnSize()里用MoveWindow()进行各种控件的定位。注意。所有控件的定位都不能超出GetSystemMetrics(SM_CXSCREEN)函数获得的cx和cy这两个参数的值。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
http://topic.csdn.net/t/20010921/16/297000.html
A:我在800*600下,用做了一个程序,当显示器分辨率为1024*768时,所有控件大小长宽都不变,而且都缩到左上角了。在初始对话框设置时,能不能使它按不同分辨率调整大小和布局?
Julienjut:在主框架的WM_SIZE消息中,根据分辨率来改变所有控件和本身的大小和相对位置。
dux:不会自动调整,因为资源文件里的对资源的描述就是固定的大小,比如40,40,30,30 描述一个button,它在不同的分辨率下显示都是这个数,当然结果就是底分辨率下显示较大,高分辨率下显示较小,并且相对位置不动,要自动调整,就用Julienjut(秋水)的方法,拦截WM_SIZE消息。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
http://topic.csdn.net/u/20090330/18/1E7AA53F-65F0-4213-BC6E-C85C6EB48221.html
A:我的SDI程序左侧有个工具栏(类似于树状结构),右边的view中嵌入的是个dialog,当我点击按钮使左侧的工具栏隐藏后如何使右侧的对话框自动调整大小,填满整个view画面?最好是对话框上的控件的位置也相应地做调整。
cnzdgs:GetClientRect获取视图窗口客户区大小,然后用MoveWindow调整对话框,再根据对话框大小用MoveWindow逐一调整控件。
oyljerry: MoveWindow 调整对话框大小,同时响应对话框WM_SIZE消息,等比例的MoveWindow 调整对话框上的控件大小
allenhiman:
响应yourview::onsize( uint type, int cx, int cy )
{
if( yourdlg.GetSafeHwnd() )
{
yourdlg.MoveWindow( 0, 0, cx, cy );
yourdlg.button.SetWindowPos(...,SWP_NOSIZE );
}
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
http://topic.csdn.net/u/20090402/20/B0A685D9-5C48-47A9-8926-D060F5DBD564.html
A:我做了一个基于对话框的应用程序(上面用的控件比较多),开发的时候我的机器分辨率是1152*864,可是安装到到一台分辨率为1024*768的机器上时,有一部分界面跑到屏幕外面去了(我做的是全屏显示的)。 针对这个问题搜索了不少帖子,可是没有找到一个满意的答案,大家有没有遇到这个问题,都是怎么解决的呢?希望大家不吝赐教,呵呵。对了,界面上的控件还有TAB控件。
我总结的解决方法:
1、用MoveWindow()或者SetWindowPos()函数挨个控件的调整,我尝试了一下,好像不太可行,特别是有tab控件的时候。
2、用一些现成的控件,找到了几个,但是只能用于visual basic. VC++里面用不了。
3、有一些类,可以把自己的对话框所对应的类从其继承,好像就能自动适应分别率的变化了,不过,没有找到。
呵呵,就这些了,大家有好的解决方法,或者什么有效的工具,多多赐教吧,呵呵!!
wqvbjhc:可以使用下面的代码获得当前分辨率(桌面大小):
m_Width=GetSystemMetrics(SM_CXSCREEN);
m_Height=GetSystemMetrics(SM_CYSCREEN);
现在的程序就会有这种情况,如果在更高分辨率的机子上运行窗口只不过是变小了而已,但如果在低分辨率的机子上运行就有可能出现窗口布局错乱的情况. 你可以把自己的机子的分辨率调为1027*768,然后在这基础上开发.这样开发出来的程序只要不在800*600或更低的分辨率下的机子(现在应该很少使用这种分辨率了吧)运行窗口的布局一般是不会有问题的.
yjkwf:楼上说的有道理,但要是拿到分辨率高点的机器上去,显得就有点小了,原来全屏显示的,现在可能跑到一角去了,右下角就空出一块空白来了!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
http://topic.csdn.net/u/20100508/21/FBC00E77-837A-47DC-91BD-1A5824A6E975.html#r_65280045
A:急请高手指点!VC中怎样使窗口最大化时,窗口中控件的布局也跟着发生变化??
设计窗口时,控件布局很合理,可是当窗口最大化后,所有的控件都到了屏幕的左上角。我知道在WM_SIZE消息函数中可以调整控件。
void CMyBMPDlg::OnSize(UINT nType, int cx, int cy) {CResizableDialog::OnSize(nType, cx, cy);// TODO: Add your message handler code hereCWnd *pWnd;pWnd = GetDlgItem(IDC_ON); //获取控件句柄IDOK为你要调整的控件IDif(nType==1) return; //如果最小化则什么都不做if(pWnd)//判断是否为空,因为对话框创建时会调用此函数,而当时控件还未创建{CRect rect; //获取控件变化前大小pWnd->GetWindowRect(&rect);ScreenToClient(&rect);//将控件大小转换为在对话框中的区域坐标rect.left=rect.left*cx/m_rect.Width();//调整控件大小rect.right=rect.right*cx/m_rect.Width();//定义m_rect用来存储控件变化前的大小rect.top=rect.top*cy/m_rect.Height();rect.bottom=rect.bottom*cy/m_rect.Height();pWnd->MoveWindow(rect);//设置控件大小}
但是这种方法只能单个控件调整,而且控件上的文字也并没有随之发生改变。有什么方法可以使所有窗口中控件的布局随窗口大小而改变???而且控件中的文字也一起随之改变??求大虾们指点!
xianglitian:http://blog.csdn.net/xianglitian/archive/2007/08/02/1722448.aspx
VisualEleven:http://www.codeproject.com/kb/dialog/easysize.aspx
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
http://blog.csdn.net/xianglitian/article/details/5667015
界面布局动态调整
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
http://wenku.baidu.com/view/e5d96308763231126edb1112.html
http://yinxusunday963.blog.163.com/blog/static/52764844201022932224633/
VC中自动改变控件位置和大小的对话框类
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
http://www.codeproject.com/dialog/resizabledialog.asp
CResizableDialog
By Paolo Messina
A CDialog derived class to implement resizable dialogs with MFC
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
http://www.codeproject.com/dialog/easysize.asp
EasySize - Dialog resizing in no time!
By Marc Richarme
An easy way to position controls in resizable dialogs or property pages using just a few macros
- 控件自适应对话框大小
- 对话框自适应大小ReSize
- 控件自适应窗口大小
- silverlight 控件大小自适应
- 图片自适应控件大小
- BS,dialog控件自适应大小
- 图片自适应Picture控件大小
- 16控件自适应窗体大小
- Android控件自适应屏幕大小
- 【QT】控件自适应窗体大小
- VC 对话框 控件 随对话框大小改变
- 随对话框大小改变控件大小
- 对话框程序最大化 控件以及字体大小自适应
- 对话框程序最大化 控件以及字体大小自适应
- 对话框程序最大化 控件以及字体大小自适应
- 控件CCtrlList随着对话框自适应缩放
- C#实现控件与窗体大小自适应
- 一个自适应大小的位图控件
- android: 页面有多个onclicklistenner时出现的问题.
- .emacs
- 好的android博客
- Java反射机制
- ASP.NET通过OracleCleint来访问数据库
- 控件自适应对话框大小
- 关系数据库的特点
- 初习C++点滴摘录之变成的一些规则与建议(7)
- Jeecg - MiniDao专题讲解公开课(2013-08-22 晚8:30-10:30 )
- 类似unix的管道的ruby简单实现代码简单说明
- 对 C++ 中 Lambda Function 的一点感想
- 基于opencv的中值滤波
- Java成为企业应用开发主流的原因?
- Java容器类概述