mfc中设置listcontrol某一行的背景和文字颜色
来源:互联网 发布:北京淘宝电商培训 编辑:程序博客网 时间:2024/05/18 03:37
MFC中用到listcontrol控件,可能会根据内容显示颜色。本文提供一种方式:
listcontrol设置为report格式,根据内容设置某一行的背景和文字颜色。具体用listcontrol的SetItemData设置某一行的属性,通过自定义属性标识实现。
注:暂时只找到了设置一行的颜色,但是不能做到设置某一个单元格的颜色,如果有网友知道设置某一个单元格的颜色解决方案,欢迎交流,谢谢。
下面以实例说明:
自定义某行内容颜色属性:
#define COLOR_DEFAULT0 //默认颜色
#define COLOR_RED 1//红色
#define COLOR_BLUE 2//蓝色
对需要设置某行内容,调用BOOL SetItemData(_In_ int nItem, _In_ DWORD_PTR dwData);其中nItem为某行位置,下标以0开始,dwData可为自定义颜色属性,如上宏定义,然后在NM_CUSTOMDRAW事件中处理。
示例对话框中有一个listcontrol,和两个button,分别设置红色和蓝色。如图:
初始化listcontrol内容,这里测试,写得比较简单
控件变量为m_lstControl,自定义函数oid InitListControl();
void CListControlExampleDlg::InitListControl(){DWORD dwStyle = m_lstControl.GetExtendedStyle(); dwStyle |= LVS_EX_GRIDLINES;// 网格线 dwStyle |= LVS_EX_CHECKBOXES;//item前生成checkbox 控件dwStyle |= LVS_EX_FULLROWSELECT;// 选中某行使整行高亮m_lstControl.SetExtendedStyle(dwStyle); // 设置扩展风格CRect rect;m_lstControl.GetClientRect(&rect);//在列表控件中插入列 m_lstControl.InsertColumn(0, _T("第一列"), LVCFMT_CENTER, rect.Width() / 3); m_lstControl.InsertColumn(1, _T("第二列"), LVCFMT_CENTER, rect.Width() / 3); m_lstControl.InsertColumn(2, _T("第三列"), LVCFMT_CENTER, rect.Width() / 3); m_lstControl.InsertItem(0, _T("测试文字1"));m_lstControl.InsertItem(1, _T("测试文字2"));m_lstControl.InsertItem(2, _T("测试文字3"));m_lstControl.SetItemText(0, 1, _T("蓝色"));m_lstControl.SetItemText(1, 1, _T("红色"));UpdateData(FALSE);return;}
listcontrol设置处理事件,选择NM_CUSTOMDRAW。
void CListControlExampleDlg::OnNMCustomdrawList1(NMHDR *pNMHDR, LRESULT *pResult){LPNMTVCUSTOMDRAW pNMCD = reinterpret_cast<LPNMTVCUSTOMDRAW>(pNMHDR);// TODO: 在此添加控件通知处理程序代码NMCUSTOMDRAW nmCustomDraw = pNMCD->nmcd;switch(nmCustomDraw.dwDrawStage){case CDDS_ITEMPREPAINT:{if (COLOR_BLUE == nmCustomDraw.lItemlParam){pNMCD->clrTextBk = RGB(51, 153, 255);pNMCD->clrText = RGB(255, 255, 255);}else if (COLOR_RED == nmCustomDraw.lItemlParam){pNMCD->clrTextBk = RGB(255, 0, 0);//背景颜色pNMCD->clrText = RGB(255, 255, 255);//文字颜色}else if (COLOR_DEFAULT == nmCustomDraw.lItemlParam){pNMCD->clrTextBk = RGB(255, 255, 255);pNMCD->clrText = RGB(0, 0, 0);}else{//}break;}default:{break;}}*pResult = 0;*pResult |= CDRF_NOTIFYPOSTPAINT;//必须有,不然就没有效果*pResult |= CDRF_NOTIFYITEMDRAW;//必须有,不然就没有效果return;}
然后为两个按钮添加点击事件
void CListControlExampleDlg::OnBnClickedButton1(){// TODO: 在此添加控件通知处理程序代码m_lstControl.SetItemData(0, COLOR_BLUE);m_lstControl.SetItemData(1, COLOR_DEFAULT);//m_lstControl.Invalidate(TRUE);//UpdateData(FALSE);return;}void CListControlExampleDlg::OnBnClickedButton2(){// TODO: 在此添加控件通知处理程序代码m_lstControl.SetItemData(0, COLOR_DEFAULT);m_lstControl.SetItemData(1, COLOR_RED);//m_lstControl.Invalidate(TRUE);//UpdateData(FALSE);return;}
运行效果如图:
阅读全文
1 0
- mfc中设置listcontrol某一行的背景和文字颜色
- 设置某一行背景颜色的CListCtrl
- 设置某一行背景颜色的CListCtrl
- 设置某一行背景颜色的CListCtrl
- MFC中设置ListControl选中某一行,并且滑动(跳转)到选择行位置
- SDK ListView改变某一行某一列的文字颜色/背景颜色
- 设置crichedit的文字颜色和背景颜色
- MFC——Listcontrol 添加背景颜色
- vb 设置msflexgrid 某一行的背景颜色
- 设置ListCtrl列表控件其中某一行的字体和背景颜色
- 设置ListCtrl列表控件其中某一行的字体和背景颜色
- 设置ListCtrl列表控件其中某一行的字体和背景颜色
- 设置CListCtrl某一行背景颜色
- 可以设置背景和文字颜色的Static控件
- MFC如何设置对话框的背景和字体颜色
- MFC如何设置对话框的背景和字体颜色
- JLabel设置背景颜色和设置文字颜色
- 给mfc中按钮设置背景颜色
- 项目二——停车场
- 容斥原理(模板+例题)
- [USACO3.4.4]rockers
- Java-设计思想
- MySQL在windows系统的安装
- mfc中设置listcontrol某一行的背景和文字颜色
- 如何写软件概要设计?
- Java基础06 组合
- 二叉树非递归遍历
- 使用Nodejs进行web开发
- uva 12934
- android——数据储存
- 2017.08.05【NOIP提高组】模拟赛B组总结
- 前端基础知识