异或运算、与运算、或运算在设计复选框中的应用
三者的性质
异或运算:相同为0,不同为1
与运算:两者为1时为1,有0为0
或运算:有1为1
定义如下宏:(观察其特点)
#define
FLAG_DUPLICATE 0x01
//
展开二进制00000001
#define FLAG_VISIBLE 0x02 // 展开二进制00000010
#define FLAG_CANSELECT 0x04 // 展开二进制00000100
#define FLAG_LABELED 0x08 // 展开二进制00001000
#define FLAG_BACKGROUND 0x10 // 展开二进制00100000
#define FLAG_SHOWOUTLINE 0x20 // 展开二进制01000000
#define FLAG_SHOWATEAGLE 0x40 // 展开二进制10000000
#define FLAG_VISIBLE 0x02 // 展开二进制00000010
#define FLAG_CANSELECT 0x04 // 展开二进制00000100
#define FLAG_LABELED 0x08 // 展开二进制00001000
#define FLAG_BACKGROUND 0x10 // 展开二进制00100000
#define FLAG_SHOWOUTLINE 0x20 // 展开二进制01000000
#define FLAG_SHOWATEAGLE 0x40 // 展开二进制10000000
(注:在C/C++中八进制以0开头,如0123(区别十进制的123);十六进制以0x开头,如0x40)
这样设置宏目的是为了能够应用位运算的性质来判断复选框的状态
假设用 int nStatus;来存储复选框的结果,可以这样做:
1.若某一个复选框选中则:nStatus=nStatus|FLAG_DUPLICATE;(其他类似)
2.那么如果取消了一个复选框呢?应该这样做:
int mask=0xffffffff^FLAG_DUPLICATE;//(把FLAG_DUPLICATE中为"1"的那一位置为0,其它位都为1)
nStatus=nStatus&mask;(其他类似)
3.如何判断某一复选框是否被选中呢?这样做:
if(nStatus&FLAG_DUPLICATE==FLAG_DUPLICATE)
cout<<"选中"<<endl;
else
cout<<"未选中"<<endl;
例子:
//
取消复选框
void __fastcall LayerInfo::SetVisible( bool bVisible)
... {
if(bVisible)
m_nStatus=m_nStatus|FLAG_VISIBLE;
else
...{
int mask = 0xffffffff^FLAG_VISIBLE;
m_nStatus=m_nStatus&mask;
}
layer->Visible= bVisible;
}
// 判断某一复选框是否被选中
if (m_nStatus & FLAG_SHOWOUTLINE == FLAG_SHOWOUTLINE)
layer -> Symbol -> Outline = true ;
else
layer -> Symbol -> Outline = false ;
void __fastcall LayerInfo::SetVisible( bool bVisible)
... {
if(bVisible)
m_nStatus=m_nStatus|FLAG_VISIBLE;
else
...{
int mask = 0xffffffff^FLAG_VISIBLE;
m_nStatus=m_nStatus&mask;
}
layer->Visible= bVisible;
}
// 判断某一复选框是否被选中
if (m_nStatus & FLAG_SHOWOUTLINE == FLAG_SHOWOUTLINE)
layer -> Symbol -> Outline = true ;
else
layer -> Symbol -> Outline = false ;