自绘ListBox,却怎么也不成功,运行程序后列表框没有反应,请高手看看ListBox属性 Owner draw:Variable
自定义类CMyListBox:CListBox
部分代码如下:
typedef struct
{
    UINT    nImageID;
    char strText[64];
} CONTENT_ITEMS, *pCONTENT_ITEMS;void CMyListBox::DrawItem(LPDRAWITEMSTRUCT lpDIS) 
{
if((m_pContents == NULL) || (m_nNumItems == 0)) {
return ;
} CDC * pDC = CDC::FromHandle(lpDIS->hDC); CRect           rcItem(lpDIS->rcItem);
CRect           rClient(rcItem);
CRect           rText;
CPoint          Pt(((rcItem.Width() - 32) /2 ), rcItem.top + 15);
pCONTENT_ITEMS  pContents    = &m_pContents[lpDIS->itemID]; CBitmap * bmp = new CBitmap;
bmp->LoadBitmap(pContents->nImageID); pDC->SetBkMode(TRANSPARENT); rClient.DeflateRect(5,10);
rcItem.CopyRect(rClient);
rText.CopyRect(rClient);
rText.top += 35; if (lpDIS->itemAction & ODA_DRAWENTIRE)
{
DrawIcon(pDC,Pt,bmp);
pDC->DrawText(pContents->strText, rText, DT_CENTER|DT_WORDBREAK);
    } if  (m_bLBDown)
{
Pt.x += 2;
Pt.y += 2;
rcItem.OffsetRect(2,2);
rText.OffsetRect(2,2);
} if ((lpDIS->itemState & ODS_SELECTED) &&
(lpDIS->itemAction & (ODA_SELECT | ODA_DRAWENTIRE)))
{
if(m_bHilight)
        {
pDC->FillSolidRect(rClient,RGB(225,225,255); if  (m_bLBDown)
pDC->Draw3dRect(rClient,GetSysColor(COLOR_3DSHADOW), GetSysColor(COLOR_BTNHIGHLIGHT));
else
pDC->Draw3dRect(rClient,GetSysColor(COLOR_BTNHIGHLIGHT),GetSysColor(COLOR_3DSHADOW));
} DrawIcon(pDC,Pt,bmp);
pDC->DrawText(pContents->strText, rText, DT_CENTER|DT_WORDBREAK);
} if (!(lpDIS->itemState & ODS_SELECTED) &&
(lpDIS->itemAction & ODA_SELECT))
{
pDC->FillSolidRect(rClient,GetSysColor(COLOR_WINDOW));
DrawIcon(pDC,Pt,bmp);
pDC->DrawText(pContents->strText, rText, DT_CENTER|DT_WORDBREAK);
}
}void CMyListBox::OnTimer(UINT nIDEvent)
{
    BOOL        bOutSide;
    CRect       rItem;
CPoint      CurPt;
CRect       rWindow;
    int         nIndex;    GetWindowRect(rWindow);
    GetCursorPos(&CurPt);    if  (!rWindow.PtInRect(CurPt))
    {
        if  (!m_bLBDown)
        {
            SetCurSel(-1);
            m_bHilight = false;
        }        KillTimer(1);
        return;
    }    m_bHilight = true;
    nIndex = ItemFromPoint(m_Point, bOutSide);    if  (nIndex != GetCurSel() && !bOutSide)
        SetCurSel(nIndex);
}void CMyListBox::DrawIcon(CDC *pDC, CPoint pt, CBitmap *bmp)
{
CDC dcMemory;
CBitmap* pOldBmp ; dcMemory.CreateCompatibleDC(pDC);
pOldBmp = dcMemory.SelectObject(bmp); pDC->BitBlt(pt.x, pt.y, 
32, 32, &dcMemory, 0, 0, SRCCOPY);
dcMemory.SelectObject(pOldBmp);
}