一个关于多选框的问题

yujimanpao 2009-06-14 07:20:03
我有 10个 IDC_CHECK 控件
ID 是 IDC_CHECK1 到 IDC_CHECK10
我如何用for 循环判断出每个控件是否是被选中的状态
请代码举例
...全文
73 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
deng335995 2009-06-15
  • 打赏
  • 举报
回复
3楼和4楼说的都可以
bingo0717 2009-06-15
  • 打赏
  • 举报
回复
上面的都讲的很清楚了
贪玩的老鼠 2009-06-15
  • 打赏
  • 举报
回复
BOOL m_Check[10];
DDX_Check(pDX, IDC_CHECK1, m_Check[0]);(如果使用控件变量的话,类似)
然后将控件关联起来,就可以象操作数组一样!
for (int i=0;i<10;i++)
if (m_Check(i) MessageBox("chec");
峰白 2009-06-15
  • 打赏
  • 举报
回复
关键是ID的值是连续的,才能用循环,支持3楼
Sou2012 2009-06-15
  • 打赏
  • 举报
回复
学习了!
Conry 2009-06-14
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 happysalay 的回复:]
这个问题与你的IDC_CHECK1-10的1-10没有关系,IDC_CHECK1是个宏定义,本身就表示一个数,而GetDlgItem(HWND,int)也需要一个整数,只要你宏定义时让IDC_CHECK1-10连起来就行。
如:
#define IDC_CHECK1 100
#define IDC_CHECK2 101
...
上述定义一般在resource.h里,你可以自己改。
for(int i = 0;i <10;i++)

  。。。
  GetDlgItem(IDC_CHECK1+i);

[/Quote]
up
bulijun1987 2009-06-14
  • 打赏
  • 举报
回复
我觉得三楼说的有道理!
denelf 2009-06-14
  • 打赏
  • 举报
回复

CString str,str_checked;
str="你选择了:\n"
UINT nID[10]={IDC_CHECK1,IDC_CHECK2,IDC_CHECK3,IDC_CHECK4,IDC_CHECK5,IDC_CHECK6,IDC_CHECK7,IDC_CHECK8,IDC_CHECK9,IDC_CHECK10};
for(int i=0;i<10;i++)
{
if( ((CButton *)GetDlgItem(nID[i]))->GetCheck())
{
GetDlgItemText(GetDlgItem(nID[i]),str_checked);
str=str+"\n"+str_checked;
}
}
MessageBox(str);
xxf012005 2009-06-14
  • 打赏
  • 举报
回复
CString str;
str.Format(_T("IDC_CHECK%d"), i);
CEdit* pEdit = (CEdit*)GetDlgItem(str);
stone1116 2009-06-14
  • 打赏
  • 举报
回复
四楼的方法
giant85 2009-06-14
  • 打赏
  • 举报
回复
我也常用楼上这种方法,用数组把ID保存起来,再偱环
schlafenhamster 2009-06-14
  • 打赏
  • 举报
回复
void CTreectrlDlg::OnOK()
{
// TODO: Add extra validation here
static int checkbox[]={IDC_CHECK1,IDC_CHECK2,IDC_CHECK3,IDC_CHECK4,IDC_CHECK5,IDC_CHECK6};
CButton *pbtn;
for(int jj=0;jj<sizeof(checkbox)/sizeof(int);jj++)
{
pbtn=(CButton *)GetDlgItem(checkbox[jj]);
if(pbtn->GetCheck()==1) afxDump << jj+1 << " Chcked!\n";
}
// CDialog::OnOK();
}
happysalay 2009-06-14
  • 打赏
  • 举报
回复
这个问题与你的IDC_CHECK1-10的1-10没有关系,IDC_CHECK1是个宏定义,本身就表示一个数,而GetDlgItem(HWND,int)也需要一个整数,只要你宏定义时让IDC_CHECK1-10连起来就行。
如:
#define IDC_CHECK1 100
#define IDC_CHECK2 101
...
上述定义一般在resource.h里,你可以自己改。
for(int i = 0;i<10;i++)

  。。。
  GetDlgItem(IDC_CHECK1+i);
用户 昵称 2009-06-14
  • 打赏
  • 举报
回复
你最好把这几个控件的id连续起来。
oyljerry 2009-06-14
  • 打赏
  • 举报
回复
for(int i=1; i<=10; i++)
{
CString str;
str.Format(_T("IDC_CHECK%d"), i);
CEdit* pEdit = (CEdit*)GetDlgItem(str);
pEdit->GetCheck();
}

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧