简单而强大的可调整大小的对话框

下载demo project - 45
Kb
下载source - 6 Kb
下载MFC7.1 DLLs - 812 Kb (If
you execute ResizeDlg.exe in above demo-project and OS fail for no mfcxxx.DLL
found, then download those DLLs and unzip to the same directory as demo-project
and try again)
示例对话框

原来的对话框
后对话框大小的右下角
后对话框大小的工具
介绍
这类的大小可调整的对话框可以自动调整控件的位置
和/或大小对话框的大小。重新定位和调整方向敏感
(左、右、上和底部可以分别处理不同)
行为六个方法之一:没有,调整,回购,相对的,变焦,DELTA_ZOOM(见
下面的更多信息)。
背景
这个类是源自于无闪烁
调整对话框(谢谢安迪·布朗)。安迪·布朗已经解决了闪烁
问题(这真的困惑我一次)和他的类支持在没有调整,
调整、回购、相对模式。
但是我需要更多的可控的重新定位和/或调整处理程序,我想
别人也需要它。所以我增强的安迪·布朗的类和写这类
这增加了以下功能:

重新定位和调整方向敏感。如安迪·布朗的类治疗
对话框的大小左右一样大小(x)。这个类可以
用不同的方式来对待它们。
变焦控制对话框放大。
能够调整多个控件的位置和大小分别
在同一X / y形水准仪。如这类可以调整两个控件
都处于同一水平线对话框的changed-width 50%,在另一个吗
话说,如果对话框的宽度增加了10个像素,这类增加
控件的宽度5像素。
使用的代码

ResizeDlg.cpp和ResizeDlg.h添加到您的项目或makefile;

添加“#包括ResizeDlg。h”stdafx.h文件或您的对话框
头文件;
让你dialog-derived类继承CResizeDlg代替
的CDialog取代“CDialog”的所有实例
与“CResizeDlg”在你的对话框头文件和实现文件。
添加一个处理程序WM_INITDIALOG如果你在你的对话框类
没有这样做,如下所述。
WM_INITDIALOG (OnInitDialog)
在你OnInitDialog处理程序应该调用基类的
OnInitDialog AddControl呼吁这些控件
自动重新定位和/或大小当对话框的大小。
这是一个例子。隐藏,复制Code//
// the minimal work you have to do in your OnInitDialog handler.
//
BOOL CMyDialog::OnInitDialog()
{
CResizeDlg::OnInitDialog();

AddControl(IDOK, CST_REPOS, CST_REPOS, CST_NONE, CST_NONE, 1);
AddControl(IDCANCEL, CST_REPOS, CST_REPOS, CST_NONE, CST_NONE, 1);

return TRUE;
}
如何控制定位和/或尺寸吗
这个类允许控制动态地重新定位和/或大小
方向(左、上、右、下)是以下方式之一。

CST_NONEdo不是这个方向重新定位和规模;CST_RESIZEsize控制对话框的大小改变
方向。隐藏,/ /复制代码
/ /在x方向,△
/ /对话框的changed-width。
//
ctrlRect。+ =△;
CST_REPOSreposition控制对话框的改变大小
方向。隐藏,/ /复制代码
/ /在x方向,△对话框
/ / changed-width。
//
ctrlRect。左+ =△;
ctrlRect。+ =△;
CST_RELATIVEreposition控件的用户定义的比例(可以做控制
总是在同一比例位置对话框)。隐藏,/ /复制代码
/ /在x方向,m_xRatio在哪里
/ /定义的比例
/ /新ClientRect pnRect是对话框
//
newCx = ctrlRect.Width ();
ctrlRect。= (int) (m_xRatio *
pnRect→宽度()——newCx / 2.0);
ctrlRect。正确的= ctrlRect。左+ newCx;
CST_ZOOMreposition和大小控制自动隐藏,/ /复制代码
/ /在x方向,pnRect在哪里
/ /对话框的新ClientRect。
/ /原始ClientRect pR0是对话框
/ /(不是以前的宽度)。
//
ctrlRect。= (int) (1.0 * ctrlRect.left离开了
*(双)pnRect→宽度()/ pR0→宽度());
ctrlRect。= (int) (1.0 * ctrlRect.right
*(双)pnRect→宽度()/ pR0→宽度());
CST_DELTA_ZOOMreposition和大小控制比例,比例都可以
分别设置。隐藏,/ /复制代码
/ /在x方向,deltaX0在哪里
/ /对话框的chenged-width
/ /与原来相比宽度(不是
/ /之前的宽度,否则错误
/ /将混乱的结果)。
/ /用户定义X-reposition m_xRatio
/ /比例和
/ / m_cxRatio是用户定义的X-size比例。
//
newCx = ctrlRect.Width ();
ctrlRect。= (int) (ctrlRect。左+
deltaX0 * m_xRatio + newCx + deltaX0 * m_cxRatio);
ctrlRect。左+ = (int) (deltaX0 * m_xRatio);

使用AddControl
你应该叫AddControl设置对话框控件的行为方式
在OnInitDialog大小。它的原型如下:隐藏,复制Codevoid AddControl( UINT nID, int xl, int xr, int yt,
int yb, int bFlickerFree = 0,
double xRatio = -1.0, double cxRatio = -1.0,
double yRatio = -1.0, double cyRatio = -1.0 );where

nIDcontrol资源IDxlhow控制对话框调整离开时,重新定位和/或调整。
把它CST_xx之一。xrhow控件重新定位和/或调整时对话框调整正确。
把它CST_xx之一。ythow控件重新定位和/或调整时对话框大小。
把它CST_xx之一。ybhow控制对话框调整底部时重新定位和/或调整。
把它CST_xx之一。bFlickerFreewhether尽量避免闪烁时重新定位和/或调整
这个比例controlxRatiouser-defined方向重新定位。有效的只有当
xl xr是CST_RELATIVE或者CST_DELTA_ZOOM。将其设置为0.0 ~ 1.0.cxRatiou由ser定义的x方向调整比例。仅当xl时有效
xr是CST_DELTA_ZOOM。将其设置为0.0~1.0。yratiouser定义的y方向复位比例。有效的只有当
yt或yb是CST_RELATIVE或CST_DELTA_ZOOM。将其设置为0.0~1.0。胞浆菌定义的y方向调整比例。仅当yt时有效
或者yb是CST_DELTA_ZOOM。将其设置为0.0~1.0。
典型的AddControl用法

保持编辑控件水平调整为对话框大小。隐藏,复制CodeAddControl(编辑id, CST_RESIZE, CST_RESIZE,
CST_NONE CST_NONE 1);
保持右上角按钮在相同的右上角位置。隐藏,复制CodeAddControl(按钮id, CST_REPOS, CST_REPOS,
CST_NONE CST_NONE 1);
保持一个按钮在固定距离的底部和水平中心。隐藏,复制CodeAddControl(按钮id, CST_RELATIVE, CST_RELATIVE,
CST_REPOS, CST_REPOS, 1, 1.0);
在水平线上有两个编辑控件,请调整左编辑控件的大小
而右一个保持相同的大小时,对话框左大小,或左一个保持
相同的大小和右一个调整时,对话框大小正确。隐藏,复制CodeAddControl (left-edit-ID CST_RESIZE,
CST_NONE, CST_NONE, CST_NONE, 1);
AddControl (right-edit-ID CST_REPOS,
CST_RESIZE, CST_NONE, 1);
两个编辑控件如示例4。使它们的大小与对话框的大小相同
changed-width。换句话说,如果对话框的宽度增加了10个像素,那么每个
将编辑控件的宽度分别增加5像素。隐藏,复制CodeAddControl(左编辑id, CST_DELTA_ZOOM, CST_DELTA_ZOOM,
CST_NONE, CST_NONE, 1,0.0, 0.5);
AddControl (right-edit-ID CST_DELTA_ZOOM CST_DELTA_ZOOM,
其中0.0,0.5表示
左编辑控件不会将其位置和大小调整为对话框的50%
changed-width。0.5表示右编辑控件改变其
位置为50%,因为左控件要调整大小,所以它必须重新定位,并调整大小
随对话框宽度变化50%。
注意

大小-抓地力(,在对话框的右下角)的资源ID (IDC_DLGSIZEBOX)为
ResizeDlg.h中定义。如果有的话,应该将其设置为另一个未使用资源ID
用在别的地方。
不要在对话框中为组控件设置无闪烁(设置
调用AddControl时,bFlickerFree到0)。
历史

2004年9月26日-首次公开发行。

本文转载于:http://www.diyabc.com/frontweb/news3626.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值