ref : http://www.vcfans.com/2009/03/automatic-scaling-of-internal-control-dialog-box-type.html
作者: Lonkil
邮箱:lonkil_AT_Gmail.com
当对话框中控件数量过多,且需要进行缩放的时,需要手工在Onsize中为每个控件位置和大小的计算,实现繁琐。本文的主要思想来自网上的一篇资料,但由于转载已造成数据的不完整,我根据该文章的思想重新实现,且补充完整了该类。效果如下图:
通过上面两幅图,第一幅图是缩放前的,第二幅图是缩放后的。上面的编辑框以及Button1是按对框等比例缩放,”确定”按钮是水平居中对齐,”取消”按钮是垂直居中对齐。”我是静态文本框”是水平等比例平移的。
这个缩放类,主要思想在对话框Onsize进行拦截,统一处理。关于CAutoCtrlSize中的AS_OnSize具体实现可以参看代码。
下面我简述一下类的使用步骤:
1. 在对话框初始化时,将本对话框中所有需要自动调整位置及大小的控件加到类中。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | |
AS_CTRLDATA这个结构体需要详细描述一下。
1 2 3 4 5 6 7 8 9 | |
dwCtrlID:需要进行变化的控件ID
asType:该控件移动属于什么类型以及其组合。AS_MOVEX水平移动,AS_MOVEY垂直移动等,请参见AS_TYPE。
nScale:缩放比例,当对话框尺寸进行一定变化,该类控件按些指定的比例进行同步缩放。范围0到100。
alignType:基于哪种方式进行缩放,如是AS_A_LEFT则基于左边对齐,AS_A_H_CENTER则是基于水平距中对齐,AS_A_V_CENTER则是基于垂直距中对齐。
isMiniSize: 是否限定最小尺寸。如果限定将以对话框初始化的大小作为最小尺寸
szMiniSize:初始值是0,0,如果指定了isMiniSize后,将用于保存最小尺寸。
2. 在对话框中的OnSize中调用CAutoCtrlSize为中的AS_OnSize。
1 2 3 4 5 6 7 8 9 | |
在此将使用我们的类来处理所有缩放。
3. 在GetMinMaxInfo中调用AS_FixSize限定最小尺寸。
1 2 3 4 5 6 7 8 9 | |
最小尺寸将是对话框的初始大小。
到此已经完成该类的使用,如果您在使用中有什么麻烦或Bug请邮件通知本人,如果您有更好的修改请发一份给我谢谢。Lonkil_AT_Gmail.com或去我小站留言
AutoSize_src.zip (43.8 KiB, 618 hits)