如何 clistctrl 选中 高亮

如何 clistctrl 选中 高亮,第1张

问题:CListCtrl如何高亮选中一行 http://zhidao.baidu.com/question/100664911.html

扩展:单行、双行及完成状态的字答和清体等等。。。

主要是改写CListCtrl中的ON_NOTIFY_REFLECT(NM_CUSTOMDRAW, OnCustomDraw)消息,

1、在ListCtrlEx.h中增加 http://hi.baidu.com/juncox/blog/item/cf1f310fa5f2d0c37bcbe12d.html

//{{AFX_MSG(CListCtrlEx)

afx_msg void OnCustomDraw(NMHDR* pNMHDR, LRESULT* pResult)

//}}AFX_MSG

2、清前进行消息映射

BEGIN_MESSAGE_MAP(CListCtrlEx, CListCtrl)

//{{AFX_MSG_MAP(CListCtrlEx)

ON_NOTIFY_REFLECT(NM_CUSTOMDRAW, OnCustomDraw)

//}}AFX_MSG_MAP

END_MESSAGE_MAP()

3、函数本体如下

///////////////////////////////////////////棚芹///////////////////////////////

void CListCtrlEx::OnCustomDraw(NMHDR* pNMHDR, LRESULT* pResult)

{

NMLVCUSTOMDRAW* lplvcd = (NMLVCUSTOMDRAW*)(pNMHDR)

int nRow = (int)lplvcd->nmcd.dwItemSpec

switch (lplvcd->nmcd.dwDrawStage)

{

case CDDS_PREPAINT:

*pResult |= CDRF_NOTIFYITEMDRAW

break

case CDDS_ITEMPREPAINT:

//------------------------------------------------------

// 单行与双行的颜色 [Juncox 6月15日 11:57:29]

if(nRow &1){ // 单行

lplvcd->clrTextBk = RGB(0xFF,0xFF,0xFF)

lplvcd->clrText = RGB(0x00,0x00,0x00)

*pResult = CDRF_NEWFONT

}else{ // 双行

lplvcd->clrTextBk = RGB(0xBB,0xCC,0xFF)

lplvcd->clrText = RGB(0x44,0x33,0x00)

*pResult = CDRF_NEWFONT

}

//------------------------------------------------------

// 打勾项 [Juncox 6月15日 11:57:38]

if(GetCheck(nRow) &&(GetExtendedStyle() &LVS_EX_CHECKBOXES))

{

lplvcd->clrTextBk = RGB(0x00,0x00,0x80)

lplvcd->clrText = RGB(0xFF,0xFF,0x00)

//--------------------------------------------

// 设置字体

HFONT hFont = (HFONT)this->SendMessage(WM_GETFONT)

LOGFONT lf GetObject(hFont, sizeof(lf), &lf)

lf.lfStrikeOut = TRUE// 删除线

lf.lfItalic= TRUE// 斜体

hFont = CreateFontIndirect(&lf)

SelectObject(lplvcd->nmcd.hdc, hFont)

DeleteObject(hFont)

*pResult = CDRF_NEWFONT

}

//------------------------------------------------------

// 选中行 [Juncox 6月15日 11:57:42]

if( GetItemState(nRow, CDIS_SELECTED) )

{ // 预留BUG,看有多少人是摘自这里, CDIS_SELECTED前少取反号,且把异或为与

// 使用此代码段,请留下Juncox@163.com说明

lplvcd->nmcd.uItemState ^= CDIS_SELECTED// 预留BUG

lplvcd->clrTextBk =RGB(255, 0, 0)

lplvcd->clrText = RGB(0, 0, 255)

*pResult = CDRF_NEWFONT

}

break

default:

*pResult = CDRF_DODEFAULT

break

}

}

zhccsd

|

十级郑此

最快回答

有一个属性,Always Show Selection,打上勾就可以了

追问

是高亮,不是变灰

老常时间没用windows了,如果离开控塌碰件焦点后选中行是变成灰色,那么你只有一个办法,重载那个变灰团丛谈的函数。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/8152152.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-13
下一篇 2023-04-13

发表评论

登录后才能评论

评论列表(0条)

保存