看在俺熬夜学习的份上,帮帮俺吧...........

wangsiyuanoo 2008-11-23 05:49:14
有四个Check Box,分别对应值是1、2、4、8,对应的控件ID是IDC_CBC_1、IDC_CBC_2、IDC_CBC_4和IDC_CBC_8

我在头文件中定义:
#define ATTR_1		0x00000000
#define ATTR_2 0x00000001
#define ATTR_3 0x00000002
#define ATTR_4 0x00000004


最后想实现的是:得到到底选择了哪几个Check Box!也就是用与或运算来求得一个结果表示选择了哪些Check Box。
比如:我选择了ATTR_1和ATTR_4,那么结果应该是1+8=9来表示选择了这两个Check Box,以此类推。

请问:具体用代码怎么写呢?(用与或运算也是我听别人说的,开始我并不知道要这么做。)
...全文
254 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
love514425 2008-11-24
  • 打赏
  • 举报
回复
> 学习.
xianyuxiaoqiang 2008-11-24
  • 打赏
  • 举报
回复
其实原理不难:

4个控件,每个控件用一个'1'比特标志,不同的控件对应不同位置上的'1'比特。

当控件被触发时,保存其对应的比特特征信息。
xianyuxiaoqiang 2008-11-24
  • 打赏
  • 举报
回复
这样好看点。
#include <conio.h> 
#define ATTR_1 0x00000001//最好别用0,0一般不用于有特定意义的地方
#define ATTR_2 0x00000002
#define ATTR_3 0x00000004
#define ATTR_4 0x00000008
int main(void)
{
int flag = 0;
flag = ATTR_1 | ATTR_2; //假设使用了控件1和2,就让flag等于ATTR_1位或ATTR_2,即flag保存ATTR_1和ATTR_2中的'1'比特
if(flag & ATTR_1) //flag位与ATTR_1,如果非零,说明flag含有ATTR_1的'1'比特,即使用了控件1
{
_cputs("BOX 1 is chosen\n");
}
if(flag & ATTR_2) //同理
{
_cputs("BOX 2 is chosen\n");
}
if(flag & ATTR_3)
{
_cputs("BOX 3 is chosen\n");
}
if(flag & ATTR_4)
{
_cputs("BOX 4 is chosen\n");
}
return 0;
}
xianyuxiaoqiang 2008-11-24
  • 打赏
  • 举报
回复
#include <conio.h>
#define ATTR_1 0x00000001//最好别用0,0一般不用于有特定意义的地方
#define ATTR_2 0x00000002
#define ATTR_3 0x00000004
#define ATTR_4 0x00000008
int main(void)
{
int flag = 0;
flag = ATTR_1 | ATTR_2; //假设使用了控件1和2,就让flag等于ATTR_1位或ATTR_2,即flag保存ATTR_1和ATTR_2中的'1'比特
if(flag & ATTR_1) //flag位与ATTR_1,如果非零,说明flag含有ATTR_1的'1'比特,即使用了控件1
{
_cputs("BOX 1 is chosen\n");
}
if(flag & ATTR_2) //同理
{
_cputs("BOX 2 is chosen\n");
}
if(flag & ATTR_3)
{
_cputs("BOX 3 is chosen\n");
}
if(flag & ATTR_4)
{
_cputs("BOX 4 is chosen\n");
}

return 0;
}
deerwin1986 2008-11-24
  • 打赏
  • 举报
回复
按二进制位与或都可以~~
wangsiyuanoo 2008-11-23
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 coolwater2009 的回复:]
0x01对应的二进制代码:00000001
0x02对应的二进制代码:00000010
0x04对应的二进制代码:00000100
采用位或操作运算符:ATTR_4|ATTR_3=0000...00110 (B) 这时只需检测相应为是否为真即可
[/Quote]
还不是不怎么理解,运算我会,道理不懂....
damo_xu 2008-11-23
  • 打赏
  • 举报
回复
楼上正解。
另外应该也还可以用发消息的办法来获得box是否被选中。
SendMessage(hwndCtrl, BM_SETCHECK, 1, 0);
SendMessage(hwndCtrl, BM_SETCHECK, 0, 0);
Just4life 2008-11-23
  • 打赏
  • 举报
回复
int ix = 8;

if( ATTR_4 == (ATTR_4 & ix) )
{
//这里表明选择了AITR_4
}

....

以次类推
Coolear 2008-11-23
  • 打赏
  • 举报
回复
0x01对应的二进制代码:00000001
0x02对应的二进制代码:00000010
0x04对应的二进制代码:00000100
采用位或操作运算符:ATTR_4|ATTR_3=0000...00110 (B) 这时只需检测相应为是否为真即可
就呆在云上 2008-11-23
  • 打赏
  • 举报
回复
int i = 0x04;//00000100
//check
if(i&i<<2) //i<<2 mean 4!
cout << "1 been set!";
else
cout << "1 not been set!";
ysysbaobei 2008-11-23
  • 打赏
  • 举报
回复
看在你熬夜的份上,帮你顶顶
bbb332 2008-11-23
  • 打赏
  • 举报
回复
帮顶!!
晚上学习多好呀,很静!!!!
having_hr 2008-11-23
  • 打赏
  • 举报
回复
如何检测一个位是否为真呢?

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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