改变List列表控件中的字体颜色和单元格背景颜色
2013-01-04 21:20
513 查看
1、首先应该有一个在对话框上的ListCtrl,并且ListCtrl属性为Report和多列模式
2、重载NM_CUSTOMDRAW消息,手工添加或者用wizard添加均可以。手工添加的格式如下:
首先在消息映射中加入以下代码
ON_NOTIFY(NM_CUSTOMDRAW, IDC_LIST_XXX, &CDlgXXX::OnNMCustomdrawXXX)
在头文件中添加public:函数
afx_msg void OnNMCustomdrawXXX(NMHDR*, LRESULT*)
在cpp文件中添加该函数的实现
3、函数的一个具体实现如下:
void CDlgXXX::OnNMCustomdrawXXX(NMHDR *pNMHDR, LRESULT *pResult)
{
//LPNMCUSTOMDRAW pNMCD = reinterpret_cast<LPNMCUSTOMDRAW>(pNMHDR);
NMLVCUSTOMDRAW* pLVCD = reinterpret_cast<NMLVCUSTOMDRAW*>(pNMHDR);
// TODO: Add your control notification handler code here
*pResult = CDRF_DODEFAULT;
if ( CDDS_PREPAINT == pLVCD->nmcd.dwDrawStage )
{
*pResult = CDRF_NOTIFYITEMDRAW;
}
else if ( CDDS_ITEMPREPAINT == pLVCD->nmcd.dwDrawStage )
{
// This is the notification message for an item. We'll request
// notifications before each subitem's prepaint stage.
*pResult = CDRF_NOTIFYSUBITEMDRAW;
}
else if ( (CDDS_ITEMPREPAINT | CDDS_SUBITEM) == pLVCD->nmcd.dwDrawStage)
{
CString str = m_ListRunState.GetItemText(pLVCD->nmcd.dwItemSpec,pLVCD->iSubItem);
if (str[0] == '!')//警告信息或者错误信息
{
pLVCD->clrText = RGB(255,0,0);//显示为红色
*pResult = CDRF_DODEFAULT;
return;
}
}
}
本例子实现了对'!'开头的单元格字体以红色显示的功能。
不同MFC版本中的第一行类型转换可能不一样,为了处理单个单元格,将第一行注释,直接copy第二行,下面的判断语句也直接copy即可,具体含义可以查看msdn。
pLVCD->nmcd.dwItemSpec表示当前行的索引值
pLVCD->iSubItem表示当前列的索引值
pLVCD->clrText代表当前单元格字体的颜色
pLVCD->clrTextBk代表当前单元格的背景色
2、重载NM_CUSTOMDRAW消息,手工添加或者用wizard添加均可以。手工添加的格式如下:
首先在消息映射中加入以下代码
ON_NOTIFY(NM_CUSTOMDRAW, IDC_LIST_XXX, &CDlgXXX::OnNMCustomdrawXXX)
在头文件中添加public:函数
afx_msg void OnNMCustomdrawXXX(NMHDR*, LRESULT*)
在cpp文件中添加该函数的实现
3、函数的一个具体实现如下:
void CDlgXXX::OnNMCustomdrawXXX(NMHDR *pNMHDR, LRESULT *pResult)
{
//LPNMCUSTOMDRAW pNMCD = reinterpret_cast<LPNMCUSTOMDRAW>(pNMHDR);
NMLVCUSTOMDRAW* pLVCD = reinterpret_cast<NMLVCUSTOMDRAW*>(pNMHDR);
// TODO: Add your control notification handler code here
*pResult = CDRF_DODEFAULT;
if ( CDDS_PREPAINT == pLVCD->nmcd.dwDrawStage )
{
*pResult = CDRF_NOTIFYITEMDRAW;
}
else if ( CDDS_ITEMPREPAINT == pLVCD->nmcd.dwDrawStage )
{
// This is the notification message for an item. We'll request
// notifications before each subitem's prepaint stage.
*pResult = CDRF_NOTIFYSUBITEMDRAW;
}
else if ( (CDDS_ITEMPREPAINT | CDDS_SUBITEM) == pLVCD->nmcd.dwDrawStage)
{
CString str = m_ListRunState.GetItemText(pLVCD->nmcd.dwItemSpec,pLVCD->iSubItem);
if (str[0] == '!')//警告信息或者错误信息
{
pLVCD->clrText = RGB(255,0,0);//显示为红色
*pResult = CDRF_DODEFAULT;
return;
}
}
}
本例子实现了对'!'开头的单元格字体以红色显示的功能。
不同MFC版本中的第一行类型转换可能不一样,为了处理单个单元格,将第一行注释,直接copy第二行,下面的判断语句也直接copy即可,具体含义可以查看msdn。
pLVCD->nmcd.dwItemSpec表示当前行的索引值
pLVCD->iSubItem表示当前列的索引值
pLVCD->clrText代表当前单元格字体的颜色
pLVCD->clrTextBk代表当前单元格的背景色
相关文章推荐
- 怎么改变Extjs控件的样式(字体颜色、背景颜色等)
- VC改变控件的背景颜色 字体 文本颜色
- Edit控件中字体、颜色、的局部改变及背景的改变
- 设置ListCtrl列表控件其中某一行的字体和背景颜色
- 设置ListCtrl列表控件其中某一行的字体和背景颜色
- WPF DataGrid 改变单元格字体颜色或单元格背景颜色(一)
- 改变控件的背景颜色和字体颜色
- WPF DataGrid 改变单元格字体颜色或单元格背景颜色(二)
- 设置ListCtrl列表控件其中某一行的字体和背景颜色
- VC改变控件的背景颜色 字体 文本颜色
- VC:改变控件的背景颜色及字体
- 动态改变listctrl 单元格背景及文字颜色(非重写控件)
- 从CStatic派生新类,形成具有可以改变字体、背景颜色 和字体颜色的控件类
- 设置ListCtrl列表控件其中某一行的字体和背景颜色
- [原创]可改变单元格字体和背景颜色的CListCtrl
- 设置ListCtrl列表控件其中某一行的字体和背景颜色
- OnCtlColor函数:MFC设置静态文本框,编辑框等控件背景和字体颜色
- Photoshop中如何去掉被扣字体的背景和改变字体颜色(二)
- ExtJS4.2 Grid知识点三:改变表格Grid单元格背景颜色
- 改变Android的hello world程序字体颜色和背景颜色