CListCtrl 修改行和单元格的背景色或字体颜色
2013-12-17 16:41
471 查看
1. 添加 NM_CUSTOMDRAW 消息及其响应函数
BEGIN_MESSAGE_MAP(DBMonitor, CDialog)
ON_NOTIFY( NM_CUSTOMDRAW, IDC_LIST_RESULT/*CListCtrl的ID*/, OnCustomdrawListResult )
... ... END_MESSAGE_MAP()
说明: 该类表控件 的 Owner Draw Fixed 属性值为 False
2. 消息响应函数
void DBMonitor::OnCustomdrawListResult(NMHDR *pNMHDR, LRESULT *pResult)
{
*pResult = CDRF_DODEFAULT;
NMLVCUSTOMDRAW * lplvdr = reinterpret_cast(pNMHDR);
NMCUSTOMDRAW &nmcd = lplvdr->nmcd;
switch(lplvdr->nmcd.dwDrawStage)//判断状态
{
case CDDS_PREPAINT:
{
*pResult = CDRF_NOTIFYITEMDRAW;
break;
}
case CDDS_ITEMPREPAINT: //如果为画ITEM之前就要进行颜色的改变
{ // 设置指定行的背景颜色, m_mapItemColor为自定义的颜色集合
COLORREF ItemColor;
DWORD nIntex = nmcd.dwItemSpec;
if(m_mapItemColor.Lookup(nIntex, ItemColor))
{
lplvdr->clrTextBk = ItemColor; // 设置背景颜色
}
*pResult = CDRF_NOTIFYSUBITEMDRAW; //关键, 将消息细化给重绘 SubItem
}
break;
case CDDS_ITEMPREPAINT | CDDS_SUBITEM: //重绘SubItem
{
COLORREF clrIndicateText = RGB(255,0,0); //提示字段 字体为红色
COLORREF clrDefaultText = RGB(0,0,0); //其他字段 字体为黑色
int nItem = static_cast( lplvdr->nmcd.dwItemSpec );
int nSubItem = static_cast(lplvdr->iSubItem);
pair point = make_pair(nItem, nSubItem);
//set< pair > m_setDataDiff; 保存想重点提示的字段
if (m_setDataDiff.find(point) != m_setDataDiff.end())
{
lplvdr->clrText = clrIndicateText;
}
else
{
lplvdr->clrText = clrDefaultText;
}
// Tell Windows to paint the control itself.
*pResult = CDRF_DODEFAULT;
}
default:
break;
}
}
3. 触发重绘消息
// 修改ClistCtrl类的指定行的颜色。
void DBMonitor::RedrawItemColor(int nFirst, int nLast)
{
m_listResult.RedrawItems(nFirst, nLast);//重新染色
UpdateWindow();
}
4. 设置颜色集合 void DBMonitor::SaveColorSet()
{
CMap<DWORD, DWORD&, COLORREF, COLORREF&> m_mapItemColor; //存储背景色的CMap
COLORREF clr[5] = { RGB(255, 164, 255), RGB(177, 174, 244), RGB(170, 247, 249), RGB(245, 250, 169), RGB(249, 205, 170) };
for (unsigned long i=0; i<10000; )
{
for (int j=0; j<2; ++j)
{
m_mapItemColor.SetAt( i, clr[j+2]);//设置某行的颜色
++i;
m_mapItemColor.SetAt( i, clr[j+2]);
++i;
}
}
}
全部代码已上传至CSDN: <<数据库数据变化监控软件(自制)>> http://download.csdn.net/detail/wendan97/6729057
BEGIN_MESSAGE_MAP(DBMonitor, CDialog)
ON_NOTIFY( NM_CUSTOMDRAW, IDC_LIST_RESULT/*CListCtrl的ID*/, OnCustomdrawListResult )
... ... END_MESSAGE_MAP()
说明: 该类表控件 的 Owner Draw Fixed 属性值为 False
2. 消息响应函数
void DBMonitor::OnCustomdrawListResult(NMHDR *pNMHDR, LRESULT *pResult)
{
*pResult = CDRF_DODEFAULT;
NMLVCUSTOMDRAW * lplvdr = reinterpret_cast(pNMHDR);
NMCUSTOMDRAW &nmcd = lplvdr->nmcd;
switch(lplvdr->nmcd.dwDrawStage)//判断状态
{
case CDDS_PREPAINT:
{
*pResult = CDRF_NOTIFYITEMDRAW;
break;
}
case CDDS_ITEMPREPAINT: //如果为画ITEM之前就要进行颜色的改变
{ // 设置指定行的背景颜色, m_mapItemColor为自定义的颜色集合
COLORREF ItemColor;
DWORD nIntex = nmcd.dwItemSpec;
if(m_mapItemColor.Lookup(nIntex, ItemColor))
{
lplvdr->clrTextBk = ItemColor; // 设置背景颜色
}
*pResult = CDRF_NOTIFYSUBITEMDRAW; //关键, 将消息细化给重绘 SubItem
}
break;
case CDDS_ITEMPREPAINT | CDDS_SUBITEM: //重绘SubItem
{
COLORREF clrIndicateText = RGB(255,0,0); //提示字段 字体为红色
COLORREF clrDefaultText = RGB(0,0,0); //其他字段 字体为黑色
int nItem = static_cast( lplvdr->nmcd.dwItemSpec );
int nSubItem = static_cast(lplvdr->iSubItem);
pair point = make_pair(nItem, nSubItem);
//set< pair > m_setDataDiff; 保存想重点提示的字段
if (m_setDataDiff.find(point) != m_setDataDiff.end())
{
lplvdr->clrText = clrIndicateText;
}
else
{
lplvdr->clrText = clrDefaultText;
}
// Tell Windows to paint the control itself.
*pResult = CDRF_DODEFAULT;
}
default:
break;
}
}
3. 触发重绘消息
// 修改ClistCtrl类的指定行的颜色。
void DBMonitor::RedrawItemColor(int nFirst, int nLast)
{
m_listResult.RedrawItems(nFirst, nLast);//重新染色
UpdateWindow();
}
4. 设置颜色集合 void DBMonitor::SaveColorSet()
{
CMap<DWORD, DWORD&, COLORREF, COLORREF&> m_mapItemColor; //存储背景色的CMap
COLORREF clr[5] = { RGB(255, 164, 255), RGB(177, 174, 244), RGB(170, 247, 249), RGB(245, 250, 169), RGB(249, 205, 170) };
for (unsigned long i=0; i<10000; )
{
for (int j=0; j<2; ++j)
{
m_mapItemColor.SetAt( i, clr[j+2]);//设置某行的颜色
++i;
m_mapItemColor.SetAt( i, clr[j+2]);
++i;
}
}
}
全部代码已上传至CSDN: <<数据库数据变化监控软件(自制)>> http://download.csdn.net/detail/wendan97/6729057
相关文章推荐
- QTextEdit中选中文本修改字体与颜色,全部文本修改字体与颜色(设置调色板的前景色、背景色、文字颜色以及基色)
- DataGridView中按单元格填充内容,字体颜色,背景色
- Extjs grid设置单元格字体颜色,及单元格背景色
- vbs 对excel的操作 删除、修改单元格,设置字体、背景色
- WinForm------GridControl中通过判断单元格文字显示不同字体颜色或背景色
- vbs 对excel的操作 删除、修改单元格,设置字体、背景色 .
- vc修改对话框的背景色和字体颜色
- 修改导航栏的背景色和字体颜色
- NPOI 修改指定单元格字体颜色
- 终端修改字体颜色和背景色
- SecureCRT 字体 颜色 修改 背景色 键盘映射 Home end delete
- Extjs grid设置单元格字体颜色,及单元格背景色
- 修改webView的字体颜色,大小,背景色
- Extjs grid设置单元格字体颜色,及单元格背景色
- SecureCRT 字体 颜色 修改 背景色 键盘映射 Home end delete
- Android使用selector修改TextView中字体颜色和背景色的方法
- vbs 对excel的操作 删除、修改单元格,设置字体、背景色
- [原创]可改变单元格字体和背景颜色的CListCtrl
- CListCtrlStyled(可以为每一个cell定义字体和颜色的CListCtrl) Creating a CListCtrl Class with Item Style Features (CListCtrlStyled Class)
- UIWebView 背景色、字体大小、字体颜色设置