zoukankan      html  css  js  c++  java
  • 简单而强大的可调整大小的对话框

    示例对话框 原来的对话框 后对话框大小的右下角 后对话框大小的工具 介绍 这类的大小可调整的对话框可以自动调整控件的位置 和/或大小对话框的大小。重新定位和调整方向敏感 (左、右、上和底部可以分别处理不同) 行为六个方法之一:没有,调整,回购,相对的,变焦,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大小。它的原型如下:隐藏,复制Code

    void 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

  • 相关阅读:
    UVa 116 单向TSP(多段图最短路)
    POJ 1328 Radar Installation(贪心)
    POJ 1260 Pearls
    POJ 1836 Alignment
    POJ 3267 The Cow Lexicon
    UVa 1620 懒惰的苏珊(逆序数)
    POJ 1018 Communication System(DP)
    UVa 1347 旅行
    UVa 437 巴比伦塔
    UVa 1025 城市里的间谍
  • 原文地址:https://www.cnblogs.com/Dincat/p/13461229.html
Copyright © 2011-2022 走看看