重绘LIST问题,真怪!三天了麻烦帮忙。
我直接用SDK(非MFC)的方式创建的LIST-VIEW控件,并在父窗口响应通知消息,能实现背景与字体色彩
改变,可不知为什么,LIST中的其它ITEM都能选择,就是第二个ITEM不能选择,所以
GetItemState(1, LVIS_SELECTED)//的时候就是返回FALSE,我直接用代码去选择第二个ITEM也不行。
怎么会这样呢?大家帮助我呀。几天了。
----------------------------------------------------------------------
case WM_NOTIFY :
{
DWORD nID = (DWORD)wParam;
if(nID == ID_LISTVIEW)
{
LRESULT lResult = S_FALSE;
NMHDR* pNMHDR = (NMHDR*)lParam;
DWORD nCode = pNMHDR->code;
m_pListCtrl->OnCustomDraw((NMHDR*)lParam, &lResult);
}
return lResult;
}
void CListCtrl::OnCustomDraw(NMHDR* pNMHDR, LRESULT* pResult)
{
NMLVCUSTOMDRAW* pLVCD = reinterpret_cast<NMLVCUSTOMDRAW*>(pNMHDR);
*pResult = CDRF_DODEFAULT;
if (pLVCD->nmcd.dwDrawStage == CDDS_PREPAINT)
{
*pResult = CDRF_NOTIFYITEMDRAW;
}
else if (pLVCD->nmcd.dwDrawStage == CDDS_ITEMPREPAINT)
{
*pResult = CDRF_NOTIFYSUBITEMDRAW;
}
else if (pLVCD->nmcd.dwDrawStage == (CDDS_ITEMPREPAINT | CDDS_SUBITEM))
{
int nItem = static_cast<int> (pLVCD->nmcd.dwItemSpec);
int nSubItem = pLVCD->iSubItem;
CDC dc ;
dc.Attach(pLVCD->nmcd.hdc);
CRect rect;
COLORREF crText, crBkgnd;
GetSubItemRect(nItem, nSubItem, LVIR_BOUNDS, rect);
if (GetItemState(nItem, LVIS_SELECTED)) //选择
{
crText = m_crTextSelect;
crBkgnd = m_crTextSelectBack;
}
else
{
if(nItem == m_nCurItem)
{
crText = m_crTextCur;
}
else
crText = m_crTextNormal;
crBkgnd = nItem % 2 ? m_crTextNormalBack_0 :m_crTextNormalBack_1;
}
pLVCD->clrText = crText;
pLVCD->clrTextBk = crBkgnd;
*pResult = CDRF_DODEFAULT;
DrawText(nItem, nSubItem, &dc, crText, crBkgnd, rect);
dc.Detach();
*pResult = CDRF_SKIPDEFAULT;
}
}