求助:CListCtrl问题 CListCtrl类在失去焦点的时候,被选择项也会消失怎样一直保持着被选择的状态谢谢~~ 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 或者属性中Always show selection: TRUE; m_list.SetItemState((direction == 0 ? m_listIndex-1:m_listIndex+1),LVIS_SELECTED|LVIS_FOCUSED, LVIS_SELECTED|LVIS_FOCUSED); 只有自绘,重载CListCtrl,DrawItem虚函数中处理 确实需要自绘的,LZ参考一下:http://topic.csdn.net/u/20091201/20/f8d55a81-05a6-42d9-928d-6954f76dccb2.html 从CListCtrl派生一个类吧。网上有这类代码。就是添加NM_CUSTOMDRAW的响应函数,在里面可以实现单双行不同颜色,选中行不同颜色:void CListCtrlEx::OnCustomDraw(NMHDR* pNMHDR, LRESULT* pResult) { // TODO: Add your control notification handler code here NMLVCUSTOMDRAW* lplvcd=(NMLVCUSTOMDRAW*)(pNMHDR); int nRow=(int)lplvcd->nmcd.dwItemSpec; switch (lplvcd->nmcd.dwDrawStage) { case CDDS_PREPAINT: *pResult |= CDRF_NOTIFYITEMDRAW; break; case CDDS_ITEMPREPAINT: //------------------------------------------------------ // 单行与双行的颜色 if(nRow%2 == 1)//单行 { lplvcd->clrTextBk = RGB(255,248,220); lplvcd->clrText = RGB(0,0,0); *pResult = CDRF_NEWFONT; } else //双行 { lplvcd->clrTextBk = RGB(176,196,222); lplvcd->clrText = RGB(0,0,0); *pResult = CDRF_NEWFONT; } //------------------------------------------------------- //------------------------------------------------------ // 打勾项 //------------------------------------------------------ //------------------------------------------------------ // 选中行 if(GetItemState(nRow,CDIS_SELECTED)) { lplvcd->nmcd.uItemState &= ~CDIS_SELECTED; lplvcd->clrTextBk = RGB(255,255,0); lplvcd->clrText = RGB(255,0,0); *pResult = CDRF_NEWFONT; } //------------------------------------------------------ break; default: *pResult = CDRF_DODEFAULT; break; }} 不知道为什么,我的代码在SDI视图中能隔行显示不同颜色,而在对话框中就不行 对话框有OnCtrlColor消息处理,是不是这个原因?NM的消息处理在返回时指定为TRUE/FALSE的值意义是不一样的。 具体查一下MSDN吧 "ON_NOTIFY_EX" 子控件接收此消息,处理,返回TRUE,则父窗口无论如何都无法接收那个消息来继续处理。子控件接收此消息,处理,返回FALSE,则父窗口此时有机会接收那个消息,并作自己的处理(通常是对此控件的处理)。 [求助]会用SkinSE的进 MFC里怎样用vector,vector里存放结构体 急问个问题,在线等,先谢了! 怎样改变IE的拖放行为 在某些机器上运行CoInitialize(NULL) 不成功 如何增加edit控件的字符串用SDK? 求教网管开发:内网访问外网时的网络管理和控制 倾家荡产--100分求高手指点!(多线程,串口通信,多视图界面), OpenNI 的简介与初步应用(3) 怎么样才能中止正在执行中的循环? activex 属性改变触发的事件问题,各位帮忙阿. h.264 静态链接库?
{
// TODO: Add your control notification handler code here
NMLVCUSTOMDRAW* lplvcd=(NMLVCUSTOMDRAW*)(pNMHDR);
int nRow=(int)lplvcd->nmcd.dwItemSpec;
switch (lplvcd->nmcd.dwDrawStage)
{
case CDDS_PREPAINT:
*pResult |= CDRF_NOTIFYITEMDRAW;
break;
case CDDS_ITEMPREPAINT:
//------------------------------------------------------
// 单行与双行的颜色
if(nRow%2 == 1)//单行
{
lplvcd->clrTextBk = RGB(255,248,220);
lplvcd->clrText = RGB(0,0,0);
*pResult = CDRF_NEWFONT;
}
else //双行
{
lplvcd->clrTextBk = RGB(176,196,222);
lplvcd->clrText = RGB(0,0,0);
*pResult = CDRF_NEWFONT;
}
//-------------------------------------------------------
//------------------------------------------------------
// 打勾项
//------------------------------------------------------
//------------------------------------------------------
// 选中行
if(GetItemState(nRow,CDIS_SELECTED))
{
lplvcd->nmcd.uItemState &= ~CDIS_SELECTED;
lplvcd->clrTextBk = RGB(255,255,0);
lplvcd->clrText = RGB(255,0,0);
*pResult = CDRF_NEWFONT;
}
//------------------------------------------------------
break;
default:
*pResult = CDRF_DODEFAULT;
break;
}
}
具体查一下MSDN吧 "ON_NOTIFY_EX"
子控件接收此消息,处理,返回TRUE,则父窗口无论如何都无法接收那个消息来继续处理。
子控件接收此消息,处理,返回FALSE,则父窗口此时有机会接收那个消息,并作自己的处理(通常是对此控件的处理)。