void CColorCmb::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct) 
{
// TODO: Add your code to draw the specified item
CDC *pDC = CDC::FromHandle(lpDrawItemStruct ->hDC);
CColorData *pData = (CColorData *)(lpDrawItemStruct ->itemData);
ASSERT(pData);
CRect rc(lpDrawItemStruct->rcItem); if(lpDrawItemStruct ->itemID ==LB_ERR)
return;
if(lpDrawItemStruct->itemAction&(ODA_DRAWENTIRE | ODA_SELECT))
pData->DrawItem(pDC,rc,lpDrawItemStruct->itemState&ODS_SELECTED);

}请看第11行itemAction函数后面紧跟一个符号“&”,请问该怎么理解?
第12行也有一个“&”,又该如何理解呢?
菜鸟手头资料有限。请高手给个解释!谢谢。

解决方案 »

  1.   

    if(lpDrawItemStruct->itemAction&(ODA_DRAWENTIRE | ODA_SELECT))        
    {       // 如果控件充许(ODA_DRAWENTIRE | ODA_SELECT)这两种动作中的任一种
       pData->DrawItem(pDC,rc,lpDrawItemStruct->itemState&ODS_SELECTED);
            // 在当前状态基础上再加上选中状态
    }
      

  2.   

    楼上的,我还是不理解你的意思,第一个&的作用是什么?在什么情况下可以这么用?
      

  3.   

    基础是位操作,
    意思是lpDrawItemStruct->itemState的值(对象状态吧?)
    与ODS_SELECTED取与操作,相当于把其中的某些位设置为0