加控件Button可以在響應NM_CUSTOMDRAW自繪消息時new出來,但是這樣會比較慢,而且無法消除閃爍效果。
最好是自繪壹個圖片做出button的效果來,在NM_CUSTOMDRAW響應函數判斷消息類型是CDDS_ITEMPREPAINT或者CDDS_ITEMPREPAINT是畫壹張圖片上去,並響應
ON_WM_MOUSEMOVE(),ON_WM_MOUSELEAVE(),ON_WM_LBUTTONDOWN(),ON_WM_LBUTTONUP()等消息動態繪制效果。如
BEGIN_MESSAGE_MAP()
ON_NOTIFY_REFLECT(NM_CUSTOMDRAW, &CXXXList::OnNMCustomdraw)
ON_WM_MOUSEMOVE()
ON_WM_MOUSELEAVE()
ON_WM_LBUTTONDOWN()
ON_WM_LBUTTONUP()
END_MESSAGE_MAP()
void CXXXList::OnNMCustomdraw(NMHDR *pNMHDR, LRESULT *pResult)
{
NMLVCUSTOMDRAW* pLVCD = reinterpret_cast<NMLVCUSTOMDRAW*>( pNMHDR );
*pResult = CDRF_DODEFAULT;
switch (pLVCD->nmcd.dwDrawStage)
{
case CDDS_ITEMPREPAINT:
*pResult = ItemPrePaint(pLVCD);
break;
case CDDS_SUBITEM | CDDS_ITEMPREPAINT:
*pResult = SubItemPrePaint(pLVCD);
break;
default:
break;
}
}
DWORD CXXXList::SubItemPrePaint(NMLVCUSTOMDRAW* pLVCD)
{
//畫圖片
CDC* pDc = CDC::FromHandle(pLVCD->nmcd.hdc);
return CDRF_NOTIFYPOSTPAINT;
}