选择/取消选择所有复选框 WIN32

Posted

技术标签:

【中文标题】选择/取消选择所有复选框 WIN32【英文标题】:Select/Unselect All CheckBox WIN32 【发布时间】:2019-06-13 15:23:55 【问题描述】:

我在为程序启动菜单动态创建的复选框列表中创建了一个“全选/取消全选”复选框。选择“选择/取消选择”复选框时,我希望列表中的所有框以显示为选中或未选中。目前,点击时只会选中“全选/取消全选”复选框。我不知道如何解决这个问题,因为这些框是动态创建的,并且只有在启动菜单中单击“确定”按钮时才会读取复选框的值。

        // create the structure to store the check boxes so we can populate it on the fly
        CheckBoxOptionStruct* Temp = new CheckBoxOptionStruct;
        Temp->OptionsListIndex = i;
        m_CheckBoxList.push_back(Temp);

        // create the check boxes
        for(int j = 0; j < m_OptionsList[i]->Labels.size(); j++)
        
            CButton* CheckBox = new CButton();
            CheckBox->Create(m_OptionsList[i]->Labels[j], WS_CHILD | WS_VISIBLE | BS_AUTOCHECKBOX, CRect(Left + 10, *Top, Right - 10, *Top + 15), this, ControlCounter++);
            CheckBox->SetFont(DialogFont);
            Temp->TheControls.push_back(CheckBox);

            // increment the row counter
            *Top += 20;
        

        // increment the next row position
        *Top += 10;

目前的运作方式:

我希望它如何工作:

【问题讨论】:

你需要三样东西:1CButton::GetCheck2一个for loop。 3CButton::SetCheck. 我将如何实施这些?我是否需要创建一个在对话框打开时等待的单独函数?这样,它必须等待查看是否单击了“全选/取消全选”按钮,然后重新创建复选框并将其值设置为 BST_CHECKED。 @RayH99 只需将您的复选框对象存储在专用数组/向量中,然后您可以在需要时循环遍历它。 在复选框的父窗口中处理ON_BN_CLICKED @RayH99 CButton::Create() 允许您指定父窗口和控件 ID。让该父窗口处理WM_COMMAND 消息,查找BN_CLICKED 通知,然后使用提供的ID/HWND 查找被点击的CheckBox。 【参考方案1】:

您可以创建用户定义的消息及其消息处理程序。

链接:How to create user-defined messages and their message handlers?

使用 SendMessage 函数触发消息,MFC 将检查消息映射并执行关联的消息处理程序。

您可以在消息处理程序中检查和选择复选框的状态。

链接:How to check and uncheck and enable and disable a check Box control in MFC?

另请注意,您为每个复选框控件设置了唯一的 ID。

详细信息:当你按下 OK 按钮时,触发消息处理程序 通过自定义消息来检查复选框的状态

更多信息:Get the notification code from Listview Control checkboxes

【讨论】:

以上是关于选择/取消选择所有复选框 WIN32的主要内容,如果未能解决你的问题,请参考以下文章

全选 |使用切换按钮取消选择所有复选框

Checkbox/RadioButton 选择和取消选择弹出窗口中的所有复选框

text 选择全部/取消选中所有复选框。

JavaScript 选择/取消选中所有复选框

以样式格式选择所有或部分父/子复选框

使用 VBA 宏从 Excel 工作簿中取消选择所有复选框