MFC中关于复选框全选

MFC中关于复选框全选,第1张

void CCListIconDlg::OnButton1() //全选保证IDC_CHECK1到IDC_CHECK4是连续的
{
// TODO: Add your control notification handler code here
for (int i = IDC_CHECK1; i <= IDC_CHECK4; i ++)
{
((CButton)GetDlgItem(i))->SetCheck(1);

}
}
void CCListIconDlg::OnButton2() //反选
{
// TODO: Add your control notification handler code here

for (int i = IDC_CHECK1; i <= IDC_CHECK4; i ++)
{
if (((CButton)GetDlgItem(i))->GetCheck())
{
((CButton)GetDlgItem(i))->SetCheck(0);
}else
((CButton)GetDlgItem(i))->SetCheck(1);

}
}
死掉 是因为你的控件没有按顺序放,放控件的时候肯定放了其他东西
#define IDC_CHECK1 1004
#define IDC_CHECK2 1005
#define IDC_CHECK3 1006
#define IDC_CHECK4 1007
如果在1004到1007之间放了别的定义就会有问题了如下面的定义
#define IDC_CHECK1 1004
#define IDC_CHECK2 1005
#define IDC_CHECK3 1006
#define IDC_CHECK4 1007
#define IDC_CHECK5 1009
那么到i = 1008的时候就会有问题

BOOL CSaomiaojieguo::OnInitDialog()
{
CDialog::OnInitDialog();
m_list1ctrlSetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_CHECKBOXES|LVS_EX_FULLROWSELECT|LVS_EDITLABELS);
CRect rect4;
m_list1ctrlGetClientRect(rect4);
this->m_list1ctrlSetExtendedStyle(m_list1ctrlGetExtendedStyle() | LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES | LVS_EX_HEADERDRAGDROP | LVS_EX_TWOCLICKACTIVATE);
this->m_list1ctrlInsertColumn(0, _TEXT("文件名"), LVCFMT_LEFT, 230);
this->m_list1ctrlInsertColumn(1, _TEXT("文件大小(字节)"), LVCFMT_LEFT, 115);
this->m_list1ctrlInsertColumn(2, _TEXT("创建日期"), LVCFMT_LEFT, 150);
this->m_list1ctrlInsertColumn(3, _TEXT("绝对路径"), LVCFMT_LEFT, 1000);
// TODO: Add extra initialization here
//Recurse(str);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
会看这个吗?这个是listctrl所在窗口的初始化函数,其中
m_list1ctrlSetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_CHECKBOXES|LVS_EX_FULLROWSELECT|LVS_EDITLABELS);
就是你先要加的复选框

组合条件的界面控制,不会有太简单的处理办法,各种情况都要根据自己的逻辑考虑到。当然,也不会是一堆复杂的if语句来处理。

针对你这个情况,建议如下:

TFe的Level1~5,应该是单选的,只能选择一个,那么应该对这5个使用一个group的RadioBox,而不是CheckBox,这样可以控制5个只能选择一个。如果需要多选,那么没办法,只能这样。

对每个Check(Radio)处理响应函数,让每个点击后判断控制,比如TFe1,那么下面可能6个不可选择,就将这六个都自动去掉,并Enable(FALSE)。这样可以确保逻辑比较清晰。

最后在Query的时候,作为严谨的程序,一堆if判断是必须的,你可以根据实际逻辑需求进行优化,比如建立逻辑树或者条件数组进行判断,但安全判断不可避免。

为编辑框创建CString类型变量m_sEdit,然后为两个复选框添加BN_CLICKED消息的响应函数OnCheck1和OnCheck2,再创建两个类成员变量
CString
str1;
CString
str2;
在构造函数中写入(根据你的需要赋值):
str1
=
"1";
str2
=
"2";
然后在复选框的响应函数中写入:
void
CZzDlg::OnCheck1()
{
//
TODO:
Add
your
control
notification
handler
code
here
m_sEdit
=
str1;
UpdateData(FALSE);
}
void
CZzDlg::OnCheck2()
{
//
TODO:
Add
your
control
notification
handler
code
here
m_sEditFormat("%d",
atoi(str1)+atoi(str2));
UpdateData(FALSE);
}
运行,OK!


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/13332814.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-16
下一篇 2023-07-16

发表评论

登录后才能评论

评论列表(0条)

保存