请教VC++高手:CListCtrl控件失去焦点后如何还继续保持某一项的高亮选中状态?

chenghello 2001-12-14 05:04:47
在一对话框模板上有一个CListCtrl控件,还有其他的Edit控件,当选中list中一项时系统会高亮显示该项(FullSelect),此时当点击Edit,即转换焦点,list因失去焦点所选中的项会变成系统默认的背景色,如何在此时仍高亮显示此项,或使此项用一特殊颜色标识,即能让用户看出此时list那一项仍是刚选的。
...全文
1849 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
jxgghost 2002-01-20
  • 打赏
  • 举报
回复
gamcom您好,我的List是Report型的,这个消息映射不知怎么加上去,是不是要派生一个ListCtrl类,若有例子代码可否发一个给我,不胜感激。
jxgghost@263.net
111222 2002-01-13
  • 打赏
  • 举报
回复
我找到了一个更加简单的方法,不过效果可能比不上自己画的好

就是SetHotItem

这样失去焦点时候该项也能突出显示
chenghello 2001-12-17
  • 打赏
  • 举报
回复
gamcom兄:我的List是Report型的,这个消息映射不知怎么加上去,是不是要派生一个ListCtrl类,若有例子代码可否发一个给我,不胜感激。chengq77@sina.com
MSVCer 2001-12-14
  • 打赏
  • 举报
回复
111222这小子的描述怎么总变啊,“(山炮)”可是意思不太好的东北土话啊
MSVCer 2001-12-14
  • 打赏
  • 举报
回复
gamcom的方法是最常用的
111222 2001-12-14
  • 打赏
  • 举报
回复
gamcom's is ok!
gamcom 2001-12-14
  • 打赏
  • 举报
回复
响应CListCtrl的ON_NOTIFY_REFLECT消息;
大致如下:

afx_msg void OnCustomdraw(NMHDR*, LRESULT*);
ON_NOTIFY_REFLECT(NM_CUSTOMDRAW, OnCustomdraw)

void CInfoList::OnCustomdraw(NMHDR* pNMHDR, LRESULT* pResult)
{
NMLVCUSTOMDRAW* pLVCD = reinterpret_cast<NMLVCUSTOMDRAW*>( pNMHDR );
*pResult = 0;

switch(pLVCD->nmcd.dwDrawStage)
{
case CDDS_PREPAINT:
*pResult = CDRF_NOTIFYITEMDRAW; // ask for item otifications.
break;

case CDDS_ITEMPREPAINT:
*pResult = CDRF_NOTIFYSUBITEMDRAW;
break;

case CDDS_ITEMPREPAINT | CDDS_SUBITEM:
int nItem = static_cast<int>(pLVCD->nmcd.dwItemSpec);// nItem表示item的index
if(...)// 这里加入判断是否被选中的代码
{
crText = RGB(cr1);
crBkgnd = RGB(cr2); // cr1和cr2分别为高亮显示时的文本和背景色,自己查一下
}
*pResult = CDRF_DODEFAULT;
break;


default:
*pResult = CDRF_DODEFAULT;
}
}
chenghello 2001-12-14
  • 打赏
  • 举报
回复
以上方法都不好用,不信你们可以试试。只改变其中一项的颜色怎么改?
turongguo 2001-12-14
  • 打赏
  • 举报
回复
上面方法有一点要注意,必须保证发消息是你的CListCtrl窗口已创建了。
turongguo 2001-12-14
  • 打赏
  • 举报
回复
最简单的方法,在CListCtrl函数的初始化处理中设置扩展模式(向自己发消息),用LVS_SHOWSELALWAYS 风格即可。
SendMessage(LVM_SETEXTENDEDLISTVIEWSTYLE,0,LVS_SHOWSELALWAYS);
zzh 2001-12-14
  • 打赏
  • 举报
回复
自已响应选中消息,然后再用一种颜色来画,这样,当失去焦点时, 只要你不更新这种颜色就可以了。
qiwei 2001-12-14
  • 打赏
  • 举报
回复
从标准CListCtrl下继承一个自己的类CMyListCtrl,增加一个int型的成员变量m_nSelected用于记下最近一个选项,再在CMyListCtrl的失去焦点消息中,把该选项进行处理。
111222 2001-12-14
  • 打赏
  • 举报
回复
LVS_SHOWSELALWAYS 不行,
你应该自己画选中的item
emmai 2001-12-14
  • 打赏
  • 举报
回复
设置CListCtrl的一个属性:LVS_SHOWSELALWAYS

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧