运用OnNMCustomdraw来实现clistctrl插入背景图片
使用OnNMCustomdraw来实现clistctrl插入背景图片
void CMyList::OnNMCustomdraw(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMLVCUSTOMDRAW lplvcd = (LPNMLVCUSTOMDRAW)pNMHDR;
if (lplvcd->nmcd.dwDrawStage == CDDS_PREPAINT)
{
RECT rcItem;
CDC* pDC = CDC::FromHandle(lplvcd->nmcd.hdc);
GetClientRect(&rcItem);
HDC dcMem;
HDC hMemDC=CreateCompatibleDC(pDC->GetSafeHdc());
HBITMAP hOldBmp=(HBITMAP)SelectObject(hMemDC,m_bitmap.m_hObject);
BitBlt(pDC->GetSafeHdc(),0,0,rcItem.right-rcItem.left,rcItem.bottom-rcItem.top,hMemDC,0,0,SRCCOPY);
SelectObject(hMemDC,hOldBmp);
*pResult = CDRF_NOTIFYITEMDRAW;
}
else if (lplvcd->nmcd.dwDrawStage == CDDS_ITEMPREPAINT)
{
*pResult = CDRF_NOTIFYSUBITEMDRAW;
}
else if (lplvcd->nmcd.dwDrawStage == (CDDS_ITEMPREPAINT | CDDS_SUBITEM))
{
COLORREF ItemColor;
if(MapItemColor.Lookup((lplvcd->nmcd.dwItemSpec), ItemColor))
{
lplvcd->clrText = ItemColor;
*pResult = CDRF_DODEFAULT;
}
}
上面是这个函数的代码,可以插入背景图片,但是插入的文字显示不出来,点击项后,背景又消失。
1、把添加背景图片的代码放到CDDS_ITEMPREPAINT | CDDS_SUBITEM中,但是这样是设置子项的,如何让图片成为整个控件的背景。
2、如何让图片固定,不随着数据一块滚动。
3、是否可以设置图片半透明,如何设置。
------解决方案--------------------
背景图片的代码放到OnEraseBackGround
void CMyList::OnNMCustomdraw(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMLVCUSTOMDRAW lplvcd = (LPNMLVCUSTOMDRAW)pNMHDR;
if (lplvcd->nmcd.dwDrawStage == CDDS_PREPAINT)
{
RECT rcItem;
CDC* pDC = CDC::FromHandle(lplvcd->nmcd.hdc);
GetClientRect(&rcItem);
HDC dcMem;
HDC hMemDC=CreateCompatibleDC(pDC->GetSafeHdc());
HBITMAP hOldBmp=(HBITMAP)SelectObject(hMemDC,m_bitmap.m_hObject);
BitBlt(pDC->GetSafeHdc(),0,0,rcItem.right-rcItem.left,rcItem.bottom-rcItem.top,hMemDC,0,0,SRCCOPY);
SelectObject(hMemDC,hOldBmp);
*pResult = CDRF_NOTIFYITEMDRAW;
}
else if (lplvcd->nmcd.dwDrawStage == CDDS_ITEMPREPAINT)
{
*pResult = CDRF_NOTIFYSUBITEMDRAW;
}
else if (lplvcd->nmcd.dwDrawStage == (CDDS_ITEMPREPAINT | CDDS_SUBITEM))
{
COLORREF ItemColor;
if(MapItemColor.Lookup((lplvcd->nmcd.dwItemSpec), ItemColor))
{
lplvcd->clrText = ItemColor;
*pResult = CDRF_DODEFAULT;
}
}
上面是这个函数的代码,可以插入背景图片,但是插入的文字显示不出来,点击项后,背景又消失。
1、把添加背景图片的代码放到CDDS_ITEMPREPAINT | CDDS_SUBITEM中,但是这样是设置子项的,如何让图片成为整个控件的背景。
2、如何让图片固定,不随着数据一块滚动。
3、是否可以设置图片半透明,如何设置。
------解决方案--------------------
背景图片的代码放到OnEraseBackGround