自定义ListCtrl中设置背景图片的问题

自定义的列表控件必须是自绘制的,因此需要在资源编辑器中设置LVS_OWNERDRAWFIXED标志,而且还必须在自定义的控件类中实现DrawItem函数。

自定义ListCtrl中设置背景图片的问题


<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

代码如下:

自定义ListCtrl中设置背景图片的问题classCListCtrlEx:publicCListCtrl
自定义ListCtrl中设置背景图片的问题自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题{
自定义ListCtrl中设置背景图片的问题
//Construction
自定义ListCtrl中设置背景图片的问题
public:
自定义ListCtrl中设置背景图片的问题CListCtrlEx();
自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题
public:
自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题CPalettem_pal;
//调色板
自定义ListCtrl中设置背景图片的问题
CBitmapm_bitmap;//背景位图
自定义ListCtrl中设置背景图片的问题
intm_cxBitmap,m_cyBitmap;//背景位图高度,宽度信息
自定义ListCtrl中设置背景图片的问题
intm_nHighlight;//高亮方式
自定义ListCtrl中设置背景图片的问题

自定义ListCtrl中设置背景图片的问题BOOLSetBkImage(LPCTSTRlpszResourceName);
//设置背景图片
自定义ListCtrl中设置背景图片的问题
BOOLSetBkImage(UINTnIDResource);
自定义ListCtrl中设置背景图片的问题
intGetColumnCount();//获取列数目
自定义ListCtrl中设置背景图片的问题
voidAdjustColumnWidth();//调整列宽
自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题
//Operations
自定义ListCtrl中设置背景图片的问题
public:
自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题
//Overrides
自定义ListCtrl中设置背景图片的问题
//ClassWizardgeneratedvirtualfunctionoverrides
自定义ListCtrl中设置背景图片的问题
//{{AFX_VIRTUAL(CListCtrlEx)
自定义ListCtrl中设置背景图片的问题
//}}AFX_VIRTUAL
自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题
//Implementation
自定义ListCtrl中设置背景图片的问题
public:
自定义ListCtrl中设置背景图片的问题
virtual~CListCtrlEx();
自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题
//Generatedmessagemapfunctions
自定义ListCtrl中设置背景图片的问题
protected:
自定义ListCtrl中设置背景图片的问题
//{{AFX_MSG(CListCtrlEx)
自定义ListCtrl中设置背景图片的问题
afx_msgvoidOnHScroll(UINTnSBCode,UINTnPos,CScrollBar*pScrollBar);//水平滚动
自定义ListCtrl中设置背景图片的问题
afx_msgvoidOnVScroll(UINTnSBCode,UINTnPos,CScrollBar*pScrollBar);//垂直滚动
自定义ListCtrl中设置背景图片的问题
afx_msgBOOLOnEraseBkgnd(CDC*pDC);//擦除背景
自定义ListCtrl中设置背景图片的问题
afx_msgvoidOnPaletteChanged(CWnd*pFocusWnd);//调色板更改
自定义ListCtrl中设置背景图片的问题
afx_msgBOOLOnQueryNewPalette();//查询新调色板
自定义ListCtrl中设置背景图片的问题
afx_msgBOOLOnNotify(WPARAMwParam,LPARAMlParam,LRESULT*pResult);
自定义ListCtrl中设置背景图片的问题
//}}AFX_MSG
自定义ListCtrl中设置背景图片的问题
virtualvoidDrawItem(LPDRAWITEMSTRUCTlpDrawItemStruct);//画每一行
自定义ListCtrl中设置背景图片的问题
DECLARE_MESSAGE_MAP()
自定义ListCtrl中设置背景图片的问题}
;
自定义ListCtrl中设置背景图片的问题


自定义ListCtrl中设置背景图片的问题自定义ListCtrl中设置背景图片的问题/**//////////////////////////////////////////////////////////////////////////////
自定义ListCtrl中设置背景图片的问题//CListCtrlEx
自定义ListCtrl中设置背景图片的问题

自定义ListCtrl中设置背景图片的问题CListCtrlEx::CListCtrlEx()
自定义ListCtrl中设置背景图片的问题自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题{
自定义ListCtrl中设置背景图片的问题m_nHighlight
=0;
自定义ListCtrl中设置背景图片的问题}

自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题CListCtrlEx::
~CListCtrlEx()
自定义ListCtrl中设置背景图片的问题自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题{
自定义ListCtrl中设置背景图片的问题}

自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题BEGIN_MESSAGE_MAP(CListCtrlEx,CListCtrl)
自定义ListCtrl中设置背景图片的问题
//{{AFX_MSG_MAP(CListCtrlEx)
自定义ListCtrl中设置背景图片的问题
ON_WM_HSCROLL()
自定义ListCtrl中设置背景图片的问题ON_WM_VSCROLL()
自定义ListCtrl中设置背景图片的问题ON_WM_ERASEBKGND()
自定义ListCtrl中设置背景图片的问题ON_WM_PALETTECHANGED()
自定义ListCtrl中设置背景图片的问题ON_WM_QUERYNEWPALETTE()
//}}AFX_MSG_MAP
自定义ListCtrl中设置背景图片的问题
END_MESSAGE_MAP()
自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题自定义ListCtrl中设置背景图片的问题
/**//////////////////////////////////////////////////////////////////////////////
自定义ListCtrl中设置背景图片的问题//CListCtrlExmessagehandlers
自定义ListCtrl中设置背景图片的问题
BOOLCListCtrlEx::SetBkImage(UINTnIDResource)
自定义ListCtrl中设置背景图片的问题自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题{
自定义ListCtrl中设置背景图片的问题
returnSetBkImage((LPCTSTR)nIDResource);
自定义ListCtrl中设置背景图片的问题}

自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题BOOLCListCtrlEx::SetBkImage(LPCTSTRlpszResourceName)
自定义ListCtrl中设置背景图片的问题自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题{
自定义ListCtrl中设置背景图片的问题
//IfthisisnotthefirstcallthenDeleteGDIobjects
自定义ListCtrl中设置背景图片的问题
if(m_bitmap.m_hObject!=NULL)
自定义ListCtrl中设置背景图片的问题m_bitmap.DeleteObject();
自定义ListCtrl中设置背景图片的问题
if(m_pal.m_hObject!=NULL)
自定义ListCtrl中设置背景图片的问题m_pal.DeleteObject();
自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题HBITMAPhBmp
=(HBITMAP)::LoadImage(AfxGetInstanceHandle(),
自定义ListCtrl中设置背景图片的问题lpszResourceName,IMAGE_BITMAP,
0,0,LR_CREATEDIBSECTION);
自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题
if(hBmp==NULL)
自定义ListCtrl中设置背景图片的问题
returnFALSE;
自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题m_bitmap.Attach(hBmp);
自定义ListCtrl中设置背景图片的问题BITMAPbm;
自定义ListCtrl中设置背景图片的问题m_bitmap.GetBitmap(
&bm);
自定义ListCtrl中设置背景图片的问题m_cxBitmap
=bm.bmWidth;
自定义ListCtrl中设置背景图片的问题m_cyBitmap
=bm.bmHeight;
自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题
//Createalogicalpaletteforthebitmap
自定义ListCtrl中设置背景图片的问题
DIBSECTIONds;
自定义ListCtrl中设置背景图片的问题BITMAPINFOHEADER
&bmInfo=ds.dsBmih;
自定义ListCtrl中设置背景图片的问题m_bitmap.GetObject(
sizeof(ds),&ds);
自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题
intnColors=bmInfo.biClrUsed?bmInfo.biClrUsed:1<<bmInfo.biBitCount;
自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题
//Createahalftonepaletteifcolors>256.
自定义ListCtrl中设置背景图片的问题
CClientDCdc(NULL);//DesktopDC
自定义ListCtrl中设置背景图片的问题
if(nColors>256)
自定义ListCtrl中设置背景图片的问题m_pal.CreateHalftonePalette(
&dc);
自定义ListCtrl中设置背景图片的问题
else
自定义ListCtrl中设置背景图片的问题自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题{
自定义ListCtrl中设置背景图片的问题
//Createthepalette
自定义ListCtrl中设置背景图片的问题

自定义ListCtrl中设置背景图片的问题RGBQUAD
*pRGB=newRGBQUAD[nColors];
自定义ListCtrl中设置背景图片的问题CDCmemDC;
自定义ListCtrl中设置背景图片的问题memDC.CreateCompatibleDC(
&dc);
自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题memDC.SelectObject(
&m_bitmap);
自定义ListCtrl中设置背景图片的问题::GetDIBColorTable(memDC,
0,nColors,pRGB);
自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题UINTnSize
=sizeof(LOGPALETTE)+(sizeof(PALETTEENTRY)*nColors);
自定义ListCtrl中设置背景图片的问题LOGPALETTE
*pLP=(LOGPALETTE*)newBYTE[nSize];
自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题pLP
->palVersion=0x300;
自定义ListCtrl中设置背景图片的问题pLP
->palNumEntries=nColors;
自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题
for(inti=0;i<nColors;i++)
自定义ListCtrl中设置背景图片的问题自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题{
自定义ListCtrl中设置背景图片的问题pLP
->palPalEntry[i].peRed=pRGB[i].rgbRed;
自定义ListCtrl中设置背景图片的问题pLP
->palPalEntry[i].peGreen=pRGB[i].rgbGreen;
自定义ListCtrl中设置背景图片的问题pLP
->palPalEntry[i].peBlue=pRGB[i].rgbBlue;
自定义ListCtrl中设置背景图片的问题pLP
->palPalEntry[i].peFlags=0;
自定义ListCtrl中设置背景图片的问题}

自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题m_pal.CreatePalette(pLP);
自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题delete[]pLP;
自定义ListCtrl中设置背景图片的问题delete[]pRGB;
自定义ListCtrl中设置背景图片的问题}

自定义ListCtrl中设置背景图片的问题Invalidate();
自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题
returnTRUE;
自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题}

自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题
voidCListCtrlEx::OnHScroll(UINTnSBCode,UINTnPos,CScrollBar*pScrollBar)
自定义ListCtrl中设置背景图片的问题自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题{
自定义ListCtrl中设置背景图片的问题
//TODO:Addyourmessagehandlercodehereand/orcalldefault
自定义ListCtrl中设置背景图片的问题
if(m_bitmap.m_hObject!=NULL)
自定义ListCtrl中设置背景图片的问题InvalidateRect(NULL);
自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题CListCtrl::OnHScroll(nSBCode,nPos,pScrollBar);
自定义ListCtrl中设置背景图片的问题}

自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题
voidCListCtrlEx::OnVScroll(UINTnSBCode,UINTnPos,CScrollBar*pScrollBar)
自定义ListCtrl中设置背景图片的问题自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题{
自定义ListCtrl中设置背景图片的问题
//TODO:Addyourmessagehandlercodehereand/orcalldefault
自定义ListCtrl中设置背景图片的问题
if(m_bitmap.m_hObject!=NULL)
自定义ListCtrl中设置背景图片的问题InvalidateRect(NULL);
自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题CListCtrl::OnVScroll(nSBCode,nPos,pScrollBar);
自定义ListCtrl中设置背景图片的问题}

自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题BOOLCListCtrlEx::OnEraseBkgnd(CDC
*pDC)
自定义ListCtrl中设置背景图片的问题自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题{
自定义ListCtrl中设置背景图片的问题
//TODO:Addyourmessagehandlercodehereand/orcalldefault
自定义ListCtrl中设置背景图片的问题
if(m_bitmap.m_hObject!=NULL)
自定义ListCtrl中设置背景图片的问题
returnTRUE;
自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题
returnCListCtrl::OnEraseBkgnd(pDC);
自定义ListCtrl中设置背景图片的问题}

自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题
voidCListCtrlEx::OnPaletteChanged(CWnd*pFocusWnd)
自定义ListCtrl中设置背景图片的问题自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题{
自定义ListCtrl中设置背景图片的问题CListCtrl::OnPaletteChanged(pFocusWnd);
自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题
//TODO:Addyourmessagehandlercodehere
自定义ListCtrl中设置背景图片的问题
if(pFocusWnd==this)
自定义ListCtrl中设置背景图片的问题
return;
自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题OnQueryNewPalette();
自定义ListCtrl中设置背景图片的问题}

自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题BOOLCListCtrlEx::OnQueryNewPalette()
自定义ListCtrl中设置背景图片的问题自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题{
自定义ListCtrl中设置背景图片的问题
//TODO:Addyourmessagehandlercodehereand/orcalldefault
自定义ListCtrl中设置背景图片的问题
CClientDCdc(this);
自定义ListCtrl中设置背景图片的问题
if(dc.GetDeviceCaps(RASTERCAPS)&RC_PALETTE&&m_pal.m_hObject!=NULL)
自定义ListCtrl中设置背景图片的问题自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题{
自定义ListCtrl中设置背景图片的问题dc.SelectPalette(
&m_pal,FALSE);
自定义ListCtrl中设置背景图片的问题BOOLresult
=dc.RealizePalette();
自定义ListCtrl中设置背景图片的问题
if(result)
自定义ListCtrl中设置背景图片的问题Invalidate();
自定义ListCtrl中设置背景图片的问题
returnresult;
自定义ListCtrl中设置背景图片的问题}

自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题
returnCListCtrl::OnQueryNewPalette();
自定义ListCtrl中设置背景图片的问题}

自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题
voidCListCtrlEx::DrawItem(LPDRAWITEMSTRUCTlpDrawItemStruct)
自定义ListCtrl中设置背景图片的问题自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题{
自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题CDC
*pDC=CDC::FromHandle(lpDrawItemStruct->hDC);
自定义ListCtrl中设置背景图片的问题CRectrcItem(lpDrawItemStruct
->rcItem);
自定义ListCtrl中设置背景图片的问题
intnItem=lpDrawItemStruct->itemID;
自定义ListCtrl中设置背景图片的问题CImageList
*pImageList;
自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题
//Savedcstate
自定义ListCtrl中设置背景图片的问题
intnSavedDC=pDC->SaveDC();
自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题
//Getitemimageandstateinfo
自定义ListCtrl中设置背景图片的问题
LV_ITEMlvi;
自定义ListCtrl中设置背景图片的问题lvi.mask
=LVIF_IMAGE|LVIF_STATE;
自定义ListCtrl中设置背景图片的问题lvi.iItem
=nItem;
自定义ListCtrl中设置背景图片的问题lvi.iSubItem
=0;
自定义ListCtrl中设置背景图片的问题lvi.stateMask
=0xFFFF;//getallstateflags
自定义ListCtrl中设置背景图片的问题
GetItem(&lvi);
自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题
//Shouldtheitembehighlighted
自定义ListCtrl中设置背景图片的问题
BOOLbHighlight=((lvi.state&LVIS_DROPHILITED)||((lvi.state&LVIS_SELECTED)&&((GetFocus()==this)||
自定义ListCtrl中设置背景图片的问题(GetStyle()
&LVS_SHOWSELALWAYS))));
自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题
//Getrectanglesfordrawing
自定义ListCtrl中设置背景图片的问题
CRectrcBounds,rcLabel,rcIcon;
自定义ListCtrl中设置背景图片的问题GetItemRect(nItem,rcBounds,LVIR_BOUNDS);
自定义ListCtrl中设置背景图片的问题GetItemRect(nItem,rcLabel,LVIR_LABEL);
自定义ListCtrl中设置背景图片的问题GetItemRect(nItem,rcIcon,LVIR_ICON);
自定义ListCtrl中设置背景图片的问题CRectrcCol(rcBounds);
自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题CStringsLabel
=GetItemText(nItem,0);
自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题
//Labelsareoffsetbyacertainamount
自定义ListCtrl中设置背景图片的问题
//Thisoffsetisrelatedtothewidthofaspacecharacter
自定义ListCtrl中设置背景图片的问题
intoffset=pDC->GetTextExtent(_T(""),1).cx*2;
自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题CRectrcHighlight;
自定义ListCtrl中设置背景图片的问题CRectrcClient;
自定义ListCtrl中设置背景图片的问题
intnExt;
自定义ListCtrl中设置背景图片的问题
switch(m_nHighlight)
自定义ListCtrl中设置背景图片的问题自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题{
自定义ListCtrl中设置背景图片的问题
case0:
自定义ListCtrl中设置背景图片的问题nExt
=pDC->GetOutputTextExtent(sLabel).cx+offset;
自定义ListCtrl中设置背景图片的问题rcHighlight
=rcLabel;
自定义ListCtrl中设置背景图片的问题
//if(rcLabel.left+nExt
自定义ListCtrl中设置背景图片的问题

自定义ListCtrl中设置背景图片的问题
if(m_bitmap.m_hObject!=NULL)
自定义ListCtrl中设置背景图片的问题自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题{
自定义ListCtrl中设置背景图片的问题CDCtempDC;
自定义ListCtrl中设置背景图片的问题tempDC.CreateCompatibleDC(pDC);
自定义ListCtrl中设置背景图片的问题tempDC.SelectObject(
&m_bitmap);
自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题GetClientRect(
&rcClient);
自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题CRgnrgnBitmap;
自定义ListCtrl中设置背景图片的问题CRectrcTmpBmp(rcItem);
自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题rcTmpBmp.right
=rcClient.right;
自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题
//Wealsoneedtocheckwhetheritisthelastitem
自定义ListCtrl中设置背景图片的问题
//Theupdateregionhastobeextendedtothebottomifitis
自定义ListCtrl中设置背景图片的问题
if(nItem==GetItemCount()-1)
自定义ListCtrl中设置背景图片的问题rcTmpBmp.bottom
=rcClient.bottom;
自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题rgnBitmap.CreateRectRgnIndirect(
&rcTmpBmp);
自定义ListCtrl中设置背景图片的问题pDC
->SelectClipRgn(&rgnBitmap);
自定义ListCtrl中设置背景图片的问题rgnBitmap.DeleteObject();
自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题
if(pDC->GetDeviceCaps(RASTERCAPS)&RC_PALETTE&&m_pal.m_hObject!=NULL)
自定义ListCtrl中设置背景图片的问题自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题{
自定义ListCtrl中设置背景图片的问题pDC
->SelectPalette(&m_pal,FALSE);
自定义ListCtrl中设置背景图片的问题pDC
->RealizePalette();
自定义ListCtrl中设置背景图片的问题}

自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题CRectrcFirstItem;
自定义ListCtrl中设置背景图片的问题GetItemRect(
0,rcFirstItem,LVIR_BOUNDS);
自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题
for(inti=rcFirstItem.left;i<rcTmpBmp.right;i+=m_cxBitmap)
自定义ListCtrl中设置背景图片的问题
for(intj=rcFirstItem.top;j<rcTmpBmp.bottom;j+=m_cyBitmap)
自定义ListCtrl中设置背景图片的问题pDC
->BitBlt(i,j,m_cxBitmap,m_cyBitmap,&tempDC,0,0,SRCCOPY);
自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题}

自定义ListCtrl中设置背景图片的问题}

自定义ListCtrl中设置背景图片的问题
//Drawthebackgroundcolor
自定义ListCtrl中设置背景图片的问题
if(bHighlight)
自定义ListCtrl中设置背景图片的问题自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题{
自定义ListCtrl中设置背景图片的问题pDC
->SetTextColor(::GetSysColor(COLOR_HIGHLIGHTTEXT));
自定义ListCtrl中设置背景图片的问题pDC
->SetBkColor(::GetSysColor(COLOR_HIGHLIGHT));
自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题pDC
->FillRect(rcHighlight,&CBrush(::GetSysColor(COLOR_HIGHLIGHT)));
自定义ListCtrl中设置背景图片的问题}

自定义ListCtrl中设置背景图片的问题
elseif(m_bitmap.m_hObject==NULL)
自定义ListCtrl中设置背景图片的问题pDC
->FillRect(rcHighlight,&CBrush(::GetSysColor(COLOR_WINDOW)));
自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题
//Setclipregion
自定义ListCtrl中设置背景图片的问题
rcCol.right=rcCol.left+GetColumnWidth(0);
自定义ListCtrl中设置背景图片的问题CRgnrgn;
自定义ListCtrl中设置背景图片的问题rgn.CreateRectRgnIndirect(
&rcCol);
自定义ListCtrl中设置背景图片的问题pDC
->SelectClipRgn(&rgn);
自定义ListCtrl中设置背景图片的问题rgn.DeleteObject();
自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题
//Drawstateicon
自定义ListCtrl中设置背景图片的问题
if(lvi.state&LVIS_STATEIMAGEMASK)
自定义ListCtrl中设置背景图片的问题自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题{
自定义ListCtrl中设置背景图片的问题
intnImage=((lvi.state&LVIS_STATEIMAGEMASK)>>12)-1;
自定义ListCtrl中设置背景图片的问题pImageList
=GetImageList(LVSIL_STATE);
自定义ListCtrl中设置背景图片的问题
if(pImageList)
自定义ListCtrl中设置背景图片的问题自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题{
自定义ListCtrl中设置背景图片的问题pImageList
->Draw(pDC,nImage,
自定义ListCtrl中设置背景图片的问题CPoint(rcCol.left,rcCol.top),ILD_TRANSPARENT);
自定义ListCtrl中设置背景图片的问题}

自定义ListCtrl中设置背景图片的问题}

自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题
//Drawnormalandoverlayicon
自定义ListCtrl中设置背景图片的问题
pImageList=GetImageList(LVSIL_SMALL);
自定义ListCtrl中设置背景图片的问题
if(pImageList)
自定义ListCtrl中设置背景图片的问题自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题{
自定义ListCtrl中设置背景图片的问题UINTnOvlImageMask
=lvi.state&LVIS_OVERLAYMASK;
自定义ListCtrl中设置背景图片的问题pImageList
->Draw(pDC,lvi.iImage,
自定义ListCtrl中设置背景图片的问题CPoint(rcIcon.left,rcIcon.top),
自定义ListCtrl中设置背景图片的问题(bHighlight
?ILD_BLEND50:0)|ILD_TRANSPARENT|nOvlImageMask);
自定义ListCtrl中设置背景图片的问题}

自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题
//Drawitemlabel-Column0
自定义ListCtrl中设置背景图片的问题
rcLabel.left+=offset/2;
自定义ListCtrl中设置背景图片的问题rcLabel.right
-=offset;
自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题pDC
->DrawText(sLabel,-1,rcLabel,DT_LEFT|DT_SINGLELINE|DT_NOPREFIX|DT_NOCLIP
自定义ListCtrl中设置背景图片的问题
|DT_VCENTER|DT_END_ELLIPSIS);
自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题
//Drawlabelsforremainingcolumns
自定义ListCtrl中设置背景图片的问题
LV_COLUMNlvc;
自定义ListCtrl中设置背景图片的问题lvc.mask
=LVCF_FMT|LVCF_WIDTH;
自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题
if(m_nHighlight==0)//Highlightonlyfirstcolumn
自定义ListCtrl中设置背景图片的问题自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题{
自定义ListCtrl中设置背景图片的问题pDC
->SetTextColor(::GetSysColor(COLOR_WINDOWTEXT));
自定义ListCtrl中设置背景图片的问题pDC
->SetBkColor(::GetSysColor(COLOR_WINDOW));
自定义ListCtrl中设置背景图片的问题}

自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题rcBounds.right
=rcHighlight.right>rcBounds.right?rcHighlight.right:
自定义ListCtrl中设置背景图片的问题rcBounds.right;
自定义ListCtrl中设置背景图片的问题rgn.CreateRectRgnIndirect(
&rcBounds);
自定义ListCtrl中设置背景图片的问题pDC
->SelectClipRgn(&rgn);
自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题
for(intnColumn=1;GetColumn(nColumn,&lvc);nColumn++)
自定义ListCtrl中设置背景图片的问题自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题{
自定义ListCtrl中设置背景图片的问题rcCol.left
=rcCol.right;
自定义ListCtrl中设置背景图片的问题rcCol.right
+=lvc.cx;
自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题
//Drawthebackgroundifneeded&&m_nHighlight==HIGHLIGHT_NORMAL
自定义ListCtrl中设置背景图片的问题
if(m_bitmap.m_hObject==NULL)
自定义ListCtrl中设置背景图片的问题pDC
->FillRect(rcCol,&CBrush(::GetSysColor(COLOR_WINDOW)));
自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题sLabel
=GetItemText(nItem,nColumn);
自定义ListCtrl中设置背景图片的问题
if(sLabel.GetLength()==0)
自定义ListCtrl中设置背景图片的问题
continue;
自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题
//Getthetextjustification
自定义ListCtrl中设置背景图片的问题
UINTnJustify=DT_LEFT;
自定义ListCtrl中设置背景图片的问题
switch(lvc.fmt&LVCFMT_JUSTIFYMASK)
自定义ListCtrl中设置背景图片的问题自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题{
自定义ListCtrl中设置背景图片的问题
caseLVCFMT_RIGHT:
自定义ListCtrl中设置背景图片的问题nJustify
=DT_RIGHT;
自定义ListCtrl中设置背景图片的问题
break;
自定义ListCtrl中设置背景图片的问题
caseLVCFMT_CENTER:
自定义ListCtrl中设置背景图片的问题nJustify
=DT_CENTER;
自定义ListCtrl中设置背景图片的问题
break;
自定义ListCtrl中设置背景图片的问题
default:
自定义ListCtrl中设置背景图片的问题
break;
自定义ListCtrl中设置背景图片的问题}

自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题rcLabel
=rcCol;
自定义ListCtrl中设置背景图片的问题rcLabel.left
+=offset;
自定义ListCtrl中设置背景图片的问题rcLabel.right
-=offset;
自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题pDC
->DrawText(sLabel,-1,rcLabel,nJustify|DT_SINGLELINE
自定义ListCtrl中设置背景图片的问题
|DT_NOPREFIX|DT_VCENTER|DT_END_ELLIPSIS);
自定义ListCtrl中设置背景图片的问题}

自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题
//Drawfocusrectangleifitemhasfocus
自定义ListCtrl中设置背景图片的问题
if(lvi.state&LVIS_FOCUSED&&(GetFocus()==this))
自定义ListCtrl中设置背景图片的问题pDC
->DrawFocusRect(rcHighlight);
自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题
//Restoredc
自定义ListCtrl中设置背景图片的问题
pDC->RestoreDC(nSavedDC);
自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题}

自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题
voidCListCtrlEx::AdjustColumnWidth()
自定义ListCtrl中设置背景图片的问题自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题{
自定义ListCtrl中设置背景图片的问题SetRedraw(FALSE);
自定义ListCtrl中设置背景图片的问题
intnColumnCount=GetColumnCount();
自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题
for(inti=0;i<nColumnCount;i++)
自定义ListCtrl中设置背景图片的问题自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题{
自定义ListCtrl中设置背景图片的问题SetColumnWidth(i,LVSCW_AUTOSIZE);
自定义ListCtrl中设置背景图片的问题
intnColumnWidth=GetColumnWidth(i);
自定义ListCtrl中设置背景图片的问题SetColumnWidth(i,LVSCW_AUTOSIZE_USEHEADER);
自定义ListCtrl中设置背景图片的问题
intnHeaderWidth=GetColumnWidth(i);
自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题SetColumnWidth(i,max(nColumnWidth,nHeaderWidth));
自定义ListCtrl中设置背景图片的问题}

自定义ListCtrl中设置背景图片的问题SetRedraw(TRUE);
自定义ListCtrl中设置背景图片的问题}

自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题
intCListCtrlEx::GetColumnCount()
自定义ListCtrl中设置背景图片的问题自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题{
自定义ListCtrl中设置背景图片的问题CHeaderCtrl
*pHeaderCtrl=GetHeaderCtrl();
自定义ListCtrl中设置背景图片的问题
return(pHeaderCtrl->GetItemCount());
自定义ListCtrl中设置背景图片的问题}

自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题BOOLCListCtrlEx::OnNotify(WPARAMwParam,LPARAMlParam,LRESULT
*pResult)
自定义ListCtrl中设置背景图片的问题自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题{
自定义ListCtrl中设置背景图片的问题HD_NOTIFY
*pHDN=(HD_NOTIFY*)lParam;
自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题
//Thiscodeisforusingbitmapinthebackground
自定义ListCtrl中设置背景图片的问题
//Invalidatetherightsideofthecontrolwhenacolumnisresized
自定义ListCtrl中设置背景图片的问题
if(pHDN->hdr.code==HDN_ITEMCHANGINGW||pHDN->hdr.code==HDN_ITEMCHANGINGA)
自定义ListCtrl中设置背景图片的问题自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题{
自定义ListCtrl中设置背景图片的问题
if(m_bitmap.m_hObject!=NULL)
自定义ListCtrl中设置背景图片的问题自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题{
自定义ListCtrl中设置背景图片的问题CRectrcClient;
自定义ListCtrl中设置背景图片的问题GetClientRect(
&rcClient);
自定义ListCtrl中设置背景图片的问题DWORDdwPos
=GetMessagePos();
自定义ListCtrl中设置背景图片的问题CPointpt(LOWORD(dwPos),HIWORD(dwPos));
自定义ListCtrl中设置背景图片的问题ScreenToClient(
&pt);
自定义ListCtrl中设置背景图片的问题rcClient.left
=pt.x;
自定义ListCtrl中设置背景图片的问题InvalidateRect(
&rcClient);
自定义ListCtrl中设置背景图片的问题}

自定义ListCtrl中设置背景图片的问题}

自定义ListCtrl中设置背景图片的问题
returnCListCtrl::OnNotify(wParam,lParam,pResult);
自定义ListCtrl中设置背景图片的问题}

自定义ListCtrl中设置背景图片的问题

自定义ListCtrl中设置背景图片的问题BOOLCCdDlg::OnInitDialog()
自定义ListCtrl中设置背景图片的问题自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题{
自定义ListCtrl中设置背景图片的问题CDialog::OnInitDialog();
自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题
//Add"About自定义ListCtrl中设置背景图片的问题"menuitemtosystemmenu.
自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题
//IDM_ABOUTBOXmustbeinthesystemcommandrange.
自定义ListCtrl中设置背景图片的问题
ASSERT((IDM_ABOUTBOX&0xFFF0)==IDM_ABOUTBOX);
自定义ListCtrl中设置背景图片的问题ASSERT(IDM_ABOUTBOX
<0xF000);
自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题CMenu
*pSysMenu=GetSystemMenu(FALSE);
自定义ListCtrl中设置背景图片的问题
if(pSysMenu!=NULL)
自定义ListCtrl中设置背景图片的问题自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题{
自定义ListCtrl中设置背景图片的问题CStringstrAboutMenu;
自定义ListCtrl中设置背景图片的问题strAboutMenu.LoadString(IDS_ABOUTBOX);
自定义ListCtrl中设置背景图片的问题
if(!strAboutMenu.IsEmpty())
自定义ListCtrl中设置背景图片的问题自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题{
自定义ListCtrl中设置背景图片的问题pSysMenu
->AppendMenu(MF_SEPARATOR);
自定义ListCtrl中设置背景图片的问题pSysMenu
->AppendMenu(MF_STRING,IDM_ABOUTBOX,strAboutMenu);
自定义ListCtrl中设置背景图片的问题}

自定义ListCtrl中设置背景图片的问题}

自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题
//Settheiconforthisdialog.Theframeworkdoesthisautomatically
自定义ListCtrl中设置背景图片的问题
//whentheapplication'smainwindowisnotadialog
自定义ListCtrl中设置背景图片的问题
SetIcon(m_hIcon,TRUE);//Setbigicon
自定义ListCtrl中设置背景图片的问题
SetIcon(m_hIcon,FALSE);//Setsmallicon
自定义ListCtrl中设置背景图片的问题

自定义ListCtrl中设置背景图片的问题m_list.InsertColumn(
0,_T("用户编号"));
自定义ListCtrl中设置背景图片的问题m_list.InsertColumn(
1,_T("用户名称"));
自定义ListCtrl中设置背景图片的问题m_list.InsertColumn(
2,_T("年龄"));
自定义ListCtrl中设置背景图片的问题m_list.InsertColumn(
3,_T("性别"));
自定义ListCtrl中设置背景图片的问题m_list.InsertColumn(
4,_T("用户住址"));
自定义ListCtrl中设置背景图片的问题
charch[5];
自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题
for(intj=1;j<=200;j++)
自定义ListCtrl中设置背景图片的问题自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题{
自定义ListCtrl中设置背景图片的问题m_list.InsertItem(j,itoa(j,ch,
10));
自定义ListCtrl中设置背景图片的问题}

自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题
for(inti=0;i<200;i++)
自定义ListCtrl中设置背景图片的问题自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题{
自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题m_list.SetItemText(i,
1,strcat(itoa(i+1,ch,10),"号用户"));
自定义ListCtrl中设置背景图片的问题m_list.SetItemText(i,
2,itoa((i+100)%100,ch,10));
自定义ListCtrl中设置背景图片的问题
if(i%2==0)
自定义ListCtrl中设置背景图片的问题自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题{
自定义ListCtrl中设置背景图片的问题m_list.SetItemText(i,
3,"");
自定义ListCtrl中设置背景图片的问题}

自定义ListCtrl中设置背景图片的问题
else
自定义ListCtrl中设置背景图片的问题自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题{
自定义ListCtrl中设置背景图片的问题m_list.SetItemText(i,
3,"");
自定义ListCtrl中设置背景图片的问题}

自定义ListCtrl中设置背景图片的问题m_list.SetItemText(i,
4,strcat(itoa(i+1,ch,10),"号大街"));
自定义ListCtrl中设置背景图片的问题}

自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题
自定义ListCtrl中设置背景图片的问题ListView_SetExtendedListViewStyle(m_list.m_hWnd,LVS_EX_FULLROWSELECT
|LVS_EX_FLATSB|LVS_EX_HEADERDRAGDROP);
自定义ListCtrl中设置背景图片的问题m_list.SetBkImage(IDB_Bless);
自定义ListCtrl中设置背景图片的问题m_list.AdjustColumnWidth();
自定义ListCtrl中设置背景图片的问题
returnTRUE;//returnTRUEunlessyousetthefocustoacontrol
自定义ListCtrl中设置背景图片的问题
}

效果如图所示:
自定义ListCtrl中设置背景图片的问题

但是这里还有一个问题,就是当下拉滚动条的时候,如何让背景图片不动,而只是数据行变化,这是接下来要做的工作。

参考资料:

http://www.codeguru.com/Cpp/controls/listview/backgroundcolorandimage/article.php/c983/