我想自绘CListCtrl控件,已经设置了CImageList,
void CSearchTelHistoryList::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
...::CImageList* ilist;
ilist = this->GetImageList(LVSIL_SMALL);
if(ilist != NULL)
{
IMAGEINFO ii;
ilist->GetImageInfo(0,&ii); CDC bmpDC;
bmpDC.CreateCompatibleDC(pDC);
HBITMAP oldbmp;
oldbmp= (HBITMAP)::SelectObject(bmpDC.m_hDC,ii.hbmImage);
this->GetItemRect(index,rcItem,LVIR_ICON);

pDC->StretchBlt(rcItem.left,rcItem.top,rcItem.Width(),rcItem.Height(),&bmpDC,
0,0,100,100,SRCCOPY);
//ii.rcImage.left,ii.rcImage.top,ii.rcImage.right - ii.rcImage.left,
//ii.rcImage.bottom- ii.rcImage.top,SRCCOPY);
::SelectObject(bmpDC.m_hDC,oldbmp); }
}
图片怎么显示不出来呀.获得imagelist有信息

解决方案 »

  1.   

    用pDC->BitBlt试下,或者,在CustomDraw消息函数中绘:
    http://www.codeproject.com/KB/list/xlistctrl.aspx
      

  2.   


    void CSearchTelHistoryList::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
    {
    CDC   *   pDC   =   CDC::FromHandle(   lpDrawItemStruct->hDC   );   
        CRect   rect   =   lpDrawItemStruct->rcItem;   
    int    index = lpDrawItemStruct->itemID;
    UINT   state ;
    CRect rcItem;
    pDC->SetBkMode(TRANSPARENT);
    pDC->SetTextColor(RGB(77,77,77)); ::LVITEM li;
    li.mask = LVIF_IMAGE|LVIF_STATE;
    li.iItem = index;
    li.iSubItem = 0;
    li.stateMask = LVIS_SELECTED;
    this->GetItem(&li); pDC->FillSolidRect(rect,RGB(100,150,150)); if(li.state == LVIS_SELECTED)
    {
    this->GetItemRect(index,&rcItem,LVIR_BOUNDS);
    pDC->FillSolidRect(rcItem,RGB(0,200,200));
    }

    this->GetItemRect(index,rcItem,LVIR_LABEL);
    pDC->DrawText(GetItemText(index,0),rcItem,DT_LEFT|DT_VCENTER |DT_SINGLELINE);

    CImageList* ilist; ilist = this->GetImageList(LVSIL_SMALL);
    if(ilist != NULL)
    {
    IMAGEINFO ii;
    //ilist->GetImageInfo(li.iImage,&ii); m_pImagelist->GetImageInfo(li.iImage,&ii);
    CDC bmpDC;
    bmpDC.CreateCompatibleDC(pDC);
    HBITMAP oldbmp;
    oldbmp= (HBITMAP)::SelectObject(bmpDC.m_hDC,ii.hbmImage);
    this->GetItemRect(index,rcItem,LVIR_ICON);

    pDC->BitBlt(0,0,50,50,&bmpDC,
    ii.rcImage.left,ii.rcImage.top,SRCCOPY);//ii.rcImage.right - ii.rcImage.left,
    //ii.rcImage.bottom- ii.rcImage.top,SRCCOPY);
    ::SelectObject(bmpDC.m_hDC,oldbmp); }
    }
      

  3.   

    我想主要是你没有用到CreateCompatibleBitmap,
    试下,把用CreateCompatibleBitmap创建的bitmap选择到内存dc - bmpDC
    然后,再用CImageList::Draw函数画到内存dc上(也可直接画到pDC,按你自已想法).
      

  4.   

    谢谢.画出来了.CImageList::Draw函数没看见