社区
界面
帖子详情
设置ClistCtrl 单元格颜色
liuduofu
2005-12-15 03:58:27
看了很多这方面的文章;并且改了很多类,都不太成功.
有没有那种只能改变单元格颜色的ClistCtrl,而基本的InsertColumn()函数和InsertItem(),SetItemText()函数不改变的.我找了很多,但都不合适,改造的ClistCtrl也不成功!
...全文
1105
12
打赏
收藏
设置ClistCtrl 单元格颜色
看了很多这方面的文章;并且改了很多类,都不太成功. 有没有那种只能改变单元格颜色的ClistCtrl,而基本的InsertColumn()函数和InsertItem(),SetItemText()函数不改变的.我找了很多,但都不合适,改造的ClistCtrl也不成功!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
12 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
liuduofu
2005-12-16
打赏
举报
回复
to Mackz(在相互)
你有这样的类吗?我可以在给你单独开分!
菜牛
2005-12-16
打赏
举报
回复
所谓自绘,是从CListCtrl继承一个类,当然原来的成员函数都可以用。
为了设置单元格颜色,需要添加一个成员变量和成员函数,然后在自绘中实现。编一下的话,50分太少。
liuduofu
2005-12-16
打赏
举报
回复
to tangjun237(tangjun2371)
这个函数是改变所有的字体颜色了吧,给我要的不太符合
liuduofu
2005-12-16
打赏
举报
回复
to vcmute(横秋)
我这个只能用ClistCtrl 控件了,是不是只要改变单元格字体的颜色,就必须自绘列头和添加项.
菜牛
2005-12-16
打赏
举报
回复
使用:
对话框上添加一个ListCtrl控件,添加控件变量m_ListCtrl,将变量类型改为CColorListCtrl
在OnInitDialog()中:
m_ListCtrl.InsertColumn(0, _T("Column 1"), 0, 100);
m_ListCtrl.InsertColumn(1, _T("Column 2"), LVCFMT_CENTER, 100);
m_ListCtrl.InsertColumn(2, _T("Column 3"), LVCFMT_RIGHT, 100);
int nItem = m_ListCtrl.InsertItem(0, _T("Row 1"));
m_ListCtrl.SetItemColor(nItem, 0, RGB(255, 0, 0));
m_ListCtrl.SetItemText(nItem, 1, _T("Row 1-2"));
m_ListCtrl.SetItemColor(nItem, 1, RGB(255, 255, 0));
m_ListCtrl.SetItemText(nItem, 2, _T("Row 1-3"));
m_ListCtrl.SetItemColor(nItem, 2, RGB(255, 0, 255));
nItem = m_ListCtrl.InsertItem(1, _T("Row 2"));
m_ListCtrl.SetItemColor(nItem, 0, RGB(100, 0, 255));
m_ListCtrl.SetItemText(nItem, 1, _T("Row 2-2"));
m_ListCtrl.SetItemColor(nItem, 1, RGB(255, 100, 0));
m_ListCtrl.SetItemText(nItem, 2, _T("Row 2-3"));
m_ListCtrl.SetItemColor(nItem, 2, RGB(255, 0, 100));
nItem = m_ListCtrl.InsertItem(2, _T("Row 3"));
m_ListCtrl.SetItemText(nItem, 1, _T("Row 3-2"));
m_ListCtrl.SetItemText(nItem, 2, _T("Row 3-3"));
//m_ListCtrl.SetItemColor(nItem, 2, RGB(255, 100, 100));
这个控件比较简单,主要实现“改变单元格颜色”这一个功能。真正要用,还需要添加一些错误处理功能和绘制列表项状态、编辑等等的功能。
菜牛
2005-12-16
打赏
举报
回复
// ColorListCtrl.cpp : 实现文件
//
#include "stdafx.h"
#include "DlgTest.h"
#include "ColorListCtrl.h"
#include ".\colorlistctrl.h"
// CColorListCtrl
IMPLEMENT_DYNAMIC(CColorListCtrl, CListCtrl)
CColorListCtrl::CColorListCtrl()
{
}
CColorListCtrl::~CColorListCtrl()
{
POSITION pos = m_lstItemColor.GetHeadPosition();
while (pos)
{
delete []m_lstItemColor.GetNext(pos);
}
}
BEGIN_MESSAGE_MAP(CColorListCtrl, CListCtrl)
END_MESSAGE_MAP()
void CColorListCtrl::PreSubclassWindow()
{
// TODO: 在此添加专用代码和/或调用基类
ModifyStyle(0, LVS_OWNERDRAWFIXED | LVS_REPORT, 0);
CListCtrl::PreSubclassWindow();
}
void CColorListCtrl::DrawItem(LPDRAWITEMSTRUCT lpDIS)
{
// TODO: 添加您的代码以绘制指定项
CDC *pDC = CDC::FromHandle(lpDIS->hDC);
int nRows = m_lstItemColor.GetCount();
COLORREF *clrCol = NULL;
if (nRows && lpDIS->itemID < nRows)
{
clrCol = m_lstItemColor.GetAt(m_lstItemColor.FindIndex(lpDIS->itemID));
}
CRect rcItem(lpDIS->rcItem);
LVCOLUMN lvColumn;
ZeroMemory(&lvColumn, sizeof(LVCOLUMN));
lvColumn.mask = LVCF_FMT | LVCF_WIDTH;
for (int nCol = 0; nCol < GetHeaderCtrl()->GetItemCount(); nCol++)
{
if (clrCol)
pDC->SetTextColor(clrCol[nCol]);
GetColumn(nCol, &lvColumn);
UINT uStyle = DT_SINGLELINE | DT_END_ELLIPSIS;
if (lvColumn.fmt & LVCFMT_LEFT)
uStyle |= DT_LEFT;
if (lvColumn.fmt & LVCFMT_RIGHT)
uStyle |= DT_RIGHT;
if (lvColumn.fmt & LVCFMT_CENTER)
uStyle |= DT_CENTER;
rcItem.right = rcItem.left + lvColumn.cx;
pDC->DrawText(GetItemText(lpDIS->itemID, nCol), rcItem, uStyle);
rcItem.left += lvColumn.cx;
}
}
// CColorListCtrl 消息处理程序
COLORREF CColorListCtrl::SetItemColor(int nRow, int nCol, COLORREF clrItem)
{
int nCols = GetHeaderCtrl()->GetItemCount();
int nRows = GetItemCount();
if (nCol >= nCols || nRow >= nRows)
return COLORREF(-1);
for (int i = m_lstItemColor.GetCount(); i < nRow + 1; i++)
{
COLORREF *clrCol = new COLORREF[nCols];
ZeroMemory(clrCol, sizeof(clrCol));
m_lstItemColor.AddTail(clrCol);
}
for (int i = 0; i < nRows; i++)
{
if (i == nRow)
{
COLORREF *clrCol = m_lstItemColor.GetAt(m_lstItemColor.FindIndex(nRow));
COLORREF clrRet = clrCol[nCol];
clrCol[nCol] = clrItem;
return clrRet;
}
}
return COLORREF(-1);
}
COLORREF CColorListCtrl::SetItemColor(LVITEM* plvItem, COLORREF clrItem)
{
if (!plvItem)
{
return COLORREF(0);
}
int nRow = plvItem->iItem;
int nCol = plvItem->iSubItem;
return SetItemColor(nCol, nRow, clrItem);
return COLORREF(-1);
}
菜牛
2005-12-16
打赏
举报
回复
简单写一下:
//ColorListCtrl.h
#pragma once
#include <afxtempl.h>
// CColorListCtrl
class CColorListCtrl : public CListCtrl
{
DECLARE_DYNAMIC(CColorListCtrl)
public:
CColorListCtrl();
virtual ~CColorListCtrl();
protected:
DECLARE_MESSAGE_MAP()
protected:
virtual void PreSubclassWindow();
public:
virtual void DrawItem(LPDRAWITEMSTRUCT /*lpDrawItemStruct*/);
COLORREF SetItemColor(int nRow, int nCol, COLORREF clrItem);
COLORREF SetItemColor(LVITEM* plvItem = NULL, COLORREF clrItem = RGB(0, 0, 0));
private:
CList<COLORREF*, COLORREF*> m_lstItemColor;
};
vcmute
2005-12-15
打赏
举报
回复
http://www.codeproject.com/miscctrl/#Grid+Control
tangjun237
2005-12-15
打赏
举报
回复
在你InsertItem()或SetItemText()之前SetTextColor()试试
liuduofu
2005-12-15
打赏
举报
回复
我是只改变一个单元格字体的颜色,,而不是全部.如果自画,那些基本的函数都不能用了吗??
duyhui
2005-12-15
打赏
举报
回复
只能自画
另外改变单元格字体颜色,SetItemText()的话,字体颜色也会改变的.
不太明白楼主的需求
liuduofu
2005-12-15
打赏
举报
回复
是单元格字体颜色!!!!!!!!!!!!!
设置
CLi
stCtrl
单元格
颜色
和背景色
动态
设置
CLi
stCtrl
单元格
颜色
和背景色
设置
CLi
stCtrl
单元格
颜色
和背景色VC++6.0
继承自
CLi
stCtrl
,可单独
设置
单元格
颜色
和背景色
MFC
CLi
stCtrl
设置
每行
颜色
、每列
颜色
或者单独项
颜色
vs2013工程实例,演示内容:为
CLi
stCtrl
控件 的子项的字体或者背景,
设置
一种或者多种
颜色
每行 每列 或单独元素(需要稍微改下代码)都可以
设置
任意
颜色
CLi
stCtrl
设置
不同行不同
颜色
,字体
颜色
CLi
stCtrl
设置
不同行不同
颜色
,指定单元行和字体
颜色
,字体大小,行高行宽
listdemo可
设置
单元格
颜色
的
Cli
stCtrl
类.rar_
CLi
stCtrl
_
CLi
stCtrl
颜色
_
CLi
stCtr
listdemo可
设置
单元格
颜色
的
Cli
stCtrl
类,定制
单元格
颜色
,能得到多彩效果
界面
15,979
社区成员
115,896
社区内容
发帖
与我相关
我的任务
界面
VC/MFC 界面
复制链接
扫一扫
分享
社区描述
VC/MFC 界面
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章