• GroupControl


    介绍 CGroupControl是一个派生的按钮类,它帮助使用组框。,带有BS_GROUPBOX样式的按钮)。CGroupControl可以方便地启用/禁用、显示/隐藏或移动组。组的父控件中不需要任何代码,因为当组控件本身被启用/禁用、显示/隐藏或移动时,这将自动完成。控件还包括一种机制,允许您对组中的每个控件执行任何操作。 如何使用它 使用CGroupControl类非常简单。按照以下步骤向现有项目中添加一个。 将源文件(GroupControl.cpp和GroupControl.h)放入您希望使用它们的目录之后,将这些文件添加到您的Visual Studio项目中。 在资源编辑器中,在您希望的地方添加一个组框,并给它一个ID,而不是默认的IDC_STATIC。 在类向导中,为您的组框控件添加一个成员变量,从“类别”列表中选择“控件”,从“变量类型”列表中选择“CGroupControl”。(如果CGroupControl没有出现在列表中,您可能需要删除类向导文件(.clw)并重新生成它。) 这就是您要利用启用、显示和移动功能所需要做的全部工作。 文档 控件有一个函数,该函数迭代它的兄弟控件,以查看它们是否位于group box控件的边界内。然后使用回调函数对这些项进行操作。包括的功能是为WM_ENABLE, WM_SHOWWINDOW,和wm_windowposchange的处理程序,但这可以很容易地扩展来执行任何操作。确定控件是否属于某个组的方法如下所述,后面是对回调机制的描述。 迭代 为了确定一个控件是否属于一个组,组控件遍历它的兄弟控件,获取它们的位置,并简单地测试它们是否位于组框的边界内。关于这一点有几个选择: 是否包含只在组内部分的控件,即。,重叠。 是查看所有控件,还是仅查看选项卡顺序将其放置在组框之后的控件。 默认情况下,该控件将不包括重叠的控件,并将查看所有兄弟控件。为了改变这种行为,可以使用以下两个函数:复制Code

    void SetAllowOverlap(BOOL bAllowOverlap = TRUE);
    void SetUseTabOrder(BOOL bUseTabOrder = TRUE);
    

    如果设置了UseTabOrder选项,那么该组将首先查看它的第一个兄弟控件,并在发现第一个控件不在其边界内时停止迭代。这将会稍微快一点,但是要依赖于正确设置了选项卡的顺序。 控制行动 回调函数签名为:Hide  复制Code

    BOOL GroupControlActionFunc(CWnd*, LPARAM);
    

    这是对GROUPCONTROLACTIONFUNC的类型定义。 用于遍历控件的函数是:Hide  复制Code

    BOOL DoGroupControlAction(GROUPCONTROLACTIONFUNC pfnGCAF, LPARAM lParam = 0)
    

    调用此函数(传递回调函数的地址)将遍历组的控件并调用每个控件的回调函数,传递一个指向控件的CWnd指针,以及传递给DoGroupControlAction的lParam。lParam用于将任何相关信息传递给回调函数。 例如,下面的代码是用来实现启用/禁用组控件的回调函数:复制Code

    static BOOL GroupControlActionFunc_Enable(CWnd* pCtrl, LPARAM lParam)
    {
        if (pCtrl == NULL)
            return TRUE;
        BOOL bEnable = (BOOL)lParam;
        pCtrl->EnableWindow(bEnable);
        return TRUE;
    }

    这是通过下面对DoGroupControlAction的调用调用的:Hide复制Code

    DoGroupControlAction(GroupControlActionFunc_Enable, bEnable);
    

    在这里,lParam仅用于指定是启用还是禁用控件。 通过调用IgnoreControls()函数并传入TRUE,可以将组控件设置为忽略它的控件并不对它们执行任何操作。这使得控制组作为一个正常的控制组。如果其他的子控件移动了它们所有的兄弟姐妹,这就特别有用,就像Peter Mares的CKCSideBannerWnd横幅控件一样。 功能 类中的公共函数如下: CGroupControl (); 标准的空构造函数 创建(LPCTSTR lpszCaption, DWORD dwStyle, const RECT & RECT, CWnd *pParentWnd, UINT nID); 创建控件。这与CButton::Create()相同,只是增加了检查组框的样式是否正确的功能。 布尔系,布尔系bOverlapped); 可用于确定任何控件是否属于某个组。如果控件的任何部分都在组的边界内,则函数返回TRUE。如果只有部分控件在组中,那么bOverlapped被设置为TRUE。 BOOL DoGroupControlAction(GROUPCONTROLACTIONFUNC pfnGCAF, LPARAM LPARAM = 0); 此函数可用于遍历组的控件,并对每个项执行操作。pfnGCAF是为每一项调用的回调函数,它传递一个表示控件的CWnd指针。lParam是传递到回调函数的应用程序定义值。注意,如果组控件被设置为忽略其co,那么调用此函数对控件没有影响技术特点。 (BOOL bUseTabOrder = TRUE); 如果bUseTabOrder为真,则将导致该组遍历控件,从该组之后的第一个同级控件开始,并以该组边界内的最后一个控件结束。如果bUseTabOrder为假,则该组将查看所有兄弟控件。 void SetAllowOverlap(BOOL bAllowOverlap = TRUE); 如果bAllowOverlap为真,那么如果控件的任何部分都在该组的边界内,则该组将认为该控件属于该组。如果bAllowOverlap为假,则整个控件必须位于该组的边界内才能属于该组。这只适用于遍历控件时。 BOOL GetUseTabOrder (); 返回迭代是否使用控制选项卡顺序。 BOOL GetAllowOverlap (); 返回重叠控件是否被认为属于该组。 void IgnoreControls(BOOL bIgnore = TRUE); 使组作为一个正常的组框,而不对组内的控件进行操作。注意,这对IsInGroup()函数的行为没有影响。 BOOL ControlsIgnored()常量; 返回组是否设置为忽略其控件。 历史 版本1.1 - 2005年2月17日 添加了“IgnoreControls”方法来允许组框被移动/调整大小等,而不需要组内的控件做同样的事情。,使组控制成为正常的组控制。如果其他的子控件像Peter Mares的CKCSideBannerWnd横幅控件那样移动它们的兄弟姐妹,这是很有用的。 版本1 - 2002年7月24日-第一版。 本文转载于:http://www.diyabc.com/frontweb/news511.html

  • 相关阅读:
    cc2530 T3定时器控制引脚P1_1的亮灭
    ifconfig相关参数及用法说明
    linux系统的三种网络连接模式
    修改Linux主机名与IP之间的映射关系
    网络相关的配置文件
    windows网络相关的命令
    修改主机IP地址
    查看局域网中连接的主机名和对应的IP地址
    mysql数据库基于linux的安装步骤及数据库操作
    genPanel.py
  • 原文地址:https://www.cnblogs.com/Dincat/p/13450701.html
Copyright © 2020-2023  润新知