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