http://wenku.baidu.com/link?url=M0RYOPqeaKx4Wh0fZFUWpU-WAeqJY1LB7opHz9t0WAjBDHAYZJyleL_IS8ctLMnVW7k33rNwphHRe0UMV4OiiYCCkjqzMvJK0Zp2MB24ngy
如何实现控件随对话框大小变化而自动调整大小和位置
VC++
2009-12-28 20:27:42
阅读
461
评论
0
字号:
大
中
小
订阅
1.
处理对话框的
WM_SIZE
,
然后用
MoveWindow
或者
SetWindowPos
来把对话框上面的
控件重新调整新位置和大小。
2.
基本的做法就是响应
WM_SIZE
消息,并按照窗口大小比例来调整控件的位置和大小,
控件的大小最好设置成窗口的百分之几,这样的话,就可以根据窗口的大小随时调整了
。
3.
每次
OnSize
即可获得一个
CRect
,
然后根据这个
CRect
来确定这些控件的位置和大小,
使用函数
MoveWindow
或
SetWindowpos
实现。
4.
1
)
通过下面两个函数获取的是显示屏幕的大小
【屏幕的分辨率】
(不包括任务栏等区域)
:
int
nFullWidth=GetSystemMetrics(
SM_CXFULLSCREEN
);
//
屏幕宽度
int
nFullHeight=GetSystemMetrics(
SM_CYFULLSCREEN
); //
屏幕高度
2
)这两个函数获取的是真正屏幕的大小【屏幕的分辨率】(包括任务栏等区域):
int
cx
=
GetSystemMetrics( SM_CXSCREEN );
int
cy
=
GetSystemMetrics( SM_CYSCREEN );
如:用前两个函数获取的大小可能是
1024*687
,而用下边两个获取的就是
1024*768
。
5.
在
OnSize()
中调用:
GetClientRect()
和
GetWindowRect()
函数可获取窗口大小,
但需注意得到的是设备坐标,如果需要画图什么的还需要转换成逻辑坐标。
6.
字体大小随窗口变化而自动变化,比如说始终使字的高度始终占窗口的
1/3
。使用:
1).
在
Creat
中将
nHeight
设成窗口长度或者宽度的一定比值就行了
(最好在
onsize
函数
中设置);
2).
使用
WM_FONTCHANGE
消息。
*****************************************************************************************************
**************************************
转载自:
http://topic.csdn.net/u/20090314/16/835a3bbb-2d13-4842-922a-8a07cde1a055.html
(作
者:
Fireway2008
)
总结步骤:
1.
创建一个
CWnd*
的数组,在初始化时取的各个控件的句柄,存在这个数组里面
2.
处理
WM_SIZE
事件,可以得到新变化后的窗口和最初窗口的变化比例
kx,ky
3.
对数组中的每一个控件,计算新位置
4.MoveWindow
移动到新位置