CListCtrl表格项的渲染

为CListCtrl组件添加消息NM_CUSTOMDRAW处理:

void Cpage2_listCtrl::OnNMCustomdrawListEarthwormThread(NMHDR *pNMHDR, LRESULT *pResult)

{
NMLVCUSTOMDRAW* pLVCD = reinterpret_cast<NMLVCUSTOMDRAW*>( pNMHDR );


*pResult = CDRF_DODEFAULT;


if ( CDDS_PREPAINT == pLVCD->nmcd.dwDrawStage )
{
*pResult = CDRF_NOTIFYITEMDRAW;
}
else if ( CDDS_ITEMPREPAINT == pLVCD->nmcd.dwDrawStage )
{
*pResult = CDRF_NOTIFYSUBITEMDRAW;
}
else if ( (CDDS_ITEMPREPAINT | CDDS_SUBITEM) == pLVCD->nmcd.dwDrawStage )
{
COLORREF clrNewTextColor, clrNewBkColor;
int    nItem = static_cast<int>(pLVCD->nmcd.dwItemSpec );
//如果当前进程Dead,则显示字体为红色,否则为黑色
CString cCurStr;
cCurStr = m_listCtrl.GetItemText(nItem,2);
//给Dead、Stop、NoExec、Alive的线程行添加颜色标记
if(CString("Dead")==cCurStr||CString("Stop")==cCurStr)
{
clrNewTextColor = RGB( 255, 0, 0 );      //字体---红色
clrNewBkColor   = RGB( 240, 200, 240 );  //背景---暗红色
}else if(CString("NoExec")==cCurStr)        
{
clrNewTextColor = RGB( 255,   0, 0   );  //字体---深蓝色
clrNewBkColor   = RGB( 128, 255, 255 );  //背景---淡蓝色
}else{
clrNewTextColor = RGB( 0, 0, 0 );        //字体---黑色
clrNewBkColor   = RGB( 255, 255, 255 );  //背景---白色
}
pLVCD->clrText = clrNewTextColor;
pLVCD->clrTextBk = clrNewBkColor;
*pResult = CDRF_DODEFAULT;

}
CListCtrl 中获取所有选中可以通过几种不同的方式来完成。首先,你需要确定是否已经选中了某些。你可以通过使用 `LVITEM` 结构来遍历 CListCtrl目,并检查是否包含选中状态。以下是一种可能的实现方式: ```cpp // 假设你的 CListCtrl 对象名为 m_listCtrl // 获取 CListCtrl目数量 int count = m_listCtrl.GetItemCount(); // 创建一个 LVITEM 结构数组来存储选中的目 LVITEM items[count]; memset(items, 0, sizeof(items)); // 设置每个目的状态,以标记是否被选中 for (int i = 0; i < count; i++) { items[i].mask = LVIF_STATE; items[i].state = 0; if (m_listCtrl.GetItem(i, &items[i])) { if (items[i].state & LVIS_SELECTED) { items[i].state = LVIS_SELECTED | LVIS_FOCUSED; // 添加焦点状态,因为可能在另一个窗口中选中 } } } ``` 然后,你可以使用这些 `LVITEM` 结构数组来获取选中的目。以下是一个简单的示例: ```cpp // 遍历所有选中的目 for (int i = 0; i < count; i++) { // 检查是否已经有了选定状态,并检查这个状态是否在当前的列表中存在 if (m_listCtrl.GetItemStateMask(i, LVIS_SELECTED) && (m_listCtrl.GetItemState(i, LVIS_SELECTED) & items[i].state)) { // 这里可以处理选中的目,例如打印它们的文本或位置等 std::wcout << L"Selected item: " << m_listCtrl.GetItemText(i) << std::endl; } } ``` 请注意,上述代码仅适用于 Windows 平台上的 MFC(Microsoft Foundation Classes)环境。如果你使用的是其他平台或库,代码可能会有所不同。此外,上述代码假设你已经正确地设置了 CListCtrl 的样式以支持选中状态。如果没有,你可能需要手动设置样式或使用其他方法来检测选中状态。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值