void CMyListBox::DrawItem (LPDRAWITEMSTRUCT lpdis)
{
    CDC dc;
    dc.Attach (lpdis->hDC);
    CRect rect = lpdis->rcItem;
    int nIndex = lpdis->itemID;    CBrush* pBrush = new CBrush;
    pBrush->CreateSolidBrush (::GetSysColor ((lpdis->itemState &
        ODS_SELECTED) ? COLOR_HIGHLIGHT : COLOR_WINDOW));
    dc.FillRect (rect, pBrush);
    delete pBrush;    if (lpdis->itemState & ODS_FOCUS)
        dc.DrawFocusRect (rect);    if (nIndex != (UINT) -1)  //这一句,很奇怪啊,为什么要把-1转换成无符号整数,据我了解,无符号整数就是正数
        dc.DrawIcon (rect.left + 4, rect.top + 2,
            (HICON) GetItemData (nIndex));    dc.Detach ();
}

解决方案 »

  1.   

    以前这里是? UINT nIndex = lpdis->itemID;
      

  2.   

    int nIndex = lpdis->itemID; 
    //如果这句是 UINT nIndex = lpdis->itemID; 
    //那么nIndex != (UINT) -1还有点道理,现在的情况,转换完全没有理由。
      

  3.   

    一般地,nIndex=-1表示列表项目尾端,可以不转换,如果转换的话,那么就要化为unit类型,使得这个值为最大,即达到尾端.
      

  4.   

    转换是无意义的!UINT nIndex = lpdis->itemID; 
    nIndex != (UINT) -1
    转换也是无意义的!0xffffffff这个数据,你按无符号来看,就是0xffffffff,按有符号来看,就是-1,不管你怎么看,他们都是同一个数,所以:
    UINT iii = 0xFFFFFFFF;
    if (-1 == iii)
    AfxMessageBox(_T("ok"));
    判断同样成功!
      

  5.   

    只有在数据位数不同时(且从低位数据向高位数据转换时),转换才有意义,我举个例子:
    int i;
    char c = -1;i = c; //结果i等于-1
    i = (BYTE) c; //结果i等于255