当我点在listctrl控件的空白地方的时候,图标的选中状态会消失,怎么避免这个情况?
1个回答
展开全部
不是选中状态消失,而是失去了焦点。
listctrl.setitemstate(i,LVIS_FOCUSED,LVIS_FOCUSED);
如果还不行就在NM_CUSTOMDRAW消息里重绘该选中行,添加背影色
void CEditListCtrl::OnNMCustomdrawList(NMHDR* pNMHDR, LRESULT* pResult)
{
NMLVCUSTOMDRAW* pNMLVCustomDraw = (NMLVCUSTOMDRAW*)pNMHDR;
*pResult = CDRF_DODEFAULT;
if (pNMLVCustomDraw->nmcd.dwDrawStage == CDDS_PREPAINT)
{
*pResult = CDRF_NOTIFYITEMDRAW;
return;
}
else if (pNMLVCustomDraw->nmcd.dwDrawStage == CDDS_ITEMPREPAINT)
{
if (m_iItem==(int)pNMLVCustomDraw->nmcd.dwItemSpec)
{
this->SetItemState(m_iItem,LVIS_SELECTED,LVIS_SELECTED);
pNMLVCustomDraw->clrTextBk=RGB(150,200,250);
}
*pResult = CDRF_NOTIFYSUBITEMDRAW;
return;
}
else if (pNMLVCustomDraw->nmcd.dwDrawStage == (/*CDDS_ITEMPREPAINT |*/ CDDS_SUBITEM))
{
}
*pResult=0;
}
listctrl.setitemstate(i,LVIS_FOCUSED,LVIS_FOCUSED);
如果还不行就在NM_CUSTOMDRAW消息里重绘该选中行,添加背影色
void CEditListCtrl::OnNMCustomdrawList(NMHDR* pNMHDR, LRESULT* pResult)
{
NMLVCUSTOMDRAW* pNMLVCustomDraw = (NMLVCUSTOMDRAW*)pNMHDR;
*pResult = CDRF_DODEFAULT;
if (pNMLVCustomDraw->nmcd.dwDrawStage == CDDS_PREPAINT)
{
*pResult = CDRF_NOTIFYITEMDRAW;
return;
}
else if (pNMLVCustomDraw->nmcd.dwDrawStage == CDDS_ITEMPREPAINT)
{
if (m_iItem==(int)pNMLVCustomDraw->nmcd.dwItemSpec)
{
this->SetItemState(m_iItem,LVIS_SELECTED,LVIS_SELECTED);
pNMLVCustomDraw->clrTextBk=RGB(150,200,250);
}
*pResult = CDRF_NOTIFYSUBITEMDRAW;
return;
}
else if (pNMLVCustomDraw->nmcd.dwDrawStage == (/*CDDS_ITEMPREPAINT |*/ CDDS_SUBITEM))
{
}
*pResult=0;
}
更多追问追答
追问
我使用的是listctrl的图标模式(ICON),setitemstate加进去后没达到效果(我是在某项获得焦点时,GetSelectionMark获得其列数,然后添加该函数的)。由于图标经过排列后,在listctrl控件总会留下空白,而点击空白的地方就会使一项失去焦点,这个怎么解决啊?你给的那个消息重绘适合否?
追答
我只能应该可以,report模式下就是主这样做的。自己试。
来自:求助得到的回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询