我想自绘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有信息
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有信息
http://www.codeproject.com/KB/list/xlistctrl.aspx
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); }
}
试下,把用CreateCompatibleBitmap创建的bitmap选择到内存dc - bmpDC
然后,再用CImageList::Draw函数画到内存dc上(也可直接画到pDC,按你自已想法).