首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

怎么改变ListControl报表形式中的Column的文字颜色和背景颜色

2012-04-19 
如何改变ListControl报表形式中的Column的文字颜色和背景颜色?如题,搜了一下大家都说要自画,但不知道如何

如何改变ListControl报表形式中的Column的文字颜色和背景颜色?
如题,搜了一下大家都说要自画,但不知道如何写。烦请指教,希望能具体点

[解决办法]
http://www.codeproject.com/KB/list/skinlist.aspx
[解决办法]
1.afx_msg void OnCustomdrawList(NMHDR*, LRESULT*);

2.ON_NOTIFY_REFLECT ( NM_CUSTOMDRAW, OnCustomdrawList )

3.void CEditListCtrl::OnCustomdrawList( NMHDR* pNMHDR, LRESULT* pResult )
{
NMLVCUSTOMDRAW* pLVCD = reinterpret_cast<NMLVCUSTOMDRAW*>( pNMHDR );


*pResult = 0;



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 )
{


int nItem=(int)(pLVCD->nmcd.dwItemSpec);

if(nItem==m_nItem){

//pLVCD->clrText = RGB(255,155,255);
pLVCD->clrTextBk = RGB(255,0,0);
}
*pResult = CDRF_DODEFAULT;
}
}
[解决办法]
可以通过重载CListCtrl和CHeaderCtrl实现

C/C++ code
/****************************************CMyListCtrl.h****************************************************/#pragma once#include "HeaderCtrlEx.h"// CMyListCtrlclass CMyListCtrl : public CListCtrl{    DECLARE_DYNAMIC(CMyListCtrl)public:    CMyListCtrl();    virtual ~CMyListCtrl();protected:    DECLARE_MESSAGE_MAP()    virtual void PreSubclassWindow();public:    CHeaderCtrlEx m_ctrlHeader;};/****************************************CMyListCtrl.h****************************************************//****************************************CMyListCtrl.cpp****************************************************///子类化CHeaderCtrlExvoid CMyListCtrl::PreSubclassWindow(){    // TODO: Add your specialized code here and/or call the base class    CListCtrl::PreSubclassWindow();    m_ctrlHeader.SubclassWindow(::GetDlgItem(m_hWnd,0));}/****************************************CMyListCtrl.cpp****************************************************//****************************************CHeaderCtrlEx.h****************************************************/#pragma once// CHeaderCtrlExclass CHeaderCtrlEx : public CHeaderCtrl{    DECLARE_DYNAMIC(CHeaderCtrlEx)public:    CHeaderCtrlEx();    virtual ~CHeaderCtrlEx();protected:    DECLARE_MESSAGE_MAP()public:    virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);};/****************************************CHeaderCtrlEx.h****************************************************//****************************************CHeaderCtrlEx.cpp****************************************************///修改表头背景色和文本颜色void CHeaderCtrlEx::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct){    // TODO:  Add your code to draw the specified item    ASSERT(lpDrawItemStruct->CtlType == ODT_HEADER);       HDITEM   hdi;       TCHAR   lpBuffer[256];       hdi.mask = HDI_TEXT;       hdi.pszText = lpBuffer;       hdi.cchTextMax = 256;     GetItem(lpDrawItemStruct->itemID,&hdi);          CDC*   pDC;       pDC = CDC::FromHandle(lpDrawItemStruct->hDC);         pDC->SetTextColor(RGB(0,0,0));      pDC->SetBkColor(RGB(222,213,242));    CBrush   brush;       brush.CreateSolidBrush(RGB(222,213,242));     CRect   rect = lpDrawItemStruct->rcItem;     //THIS FONT IS ONLY FOR DRAWING AS LONG AS WE DON'T DO A SetFont(...)       CBrush   *pOldBrush=pDC->SelectObject(&brush);       pDC->FillRect(&rect,&brush);       pDC->SelectObject(pOldBrush);       pDC->SelectObject(GetStockObject(DEFAULT_GUI_FONT));       UINT   uFormat = DT_CENTER;      //DRAW THE TEXT    lpDrawItemStruct->rcItem.top += 6;    ::DrawText(lpDrawItemStruct->hDC,lpBuffer,strlen(lpBuffer),         &lpDrawItemStruct->rcItem,uFormat);       pDC->SelectStockObject(SYSTEM_FONT);}/****************************************CHeaderCtrlEx.cpp****************************************************//****************************************主程序中**************************************************************///头文件中:CMyCtrlList m_ctrlList ;   //m_ctrlList为与CListCtrl控件关联的CMyCtrlList变量//主程序初始化函数中://设置表头自绘属性HDITEM  hdItem;   hdItem.mask = HDI_FORMAT; for(int i=0;i<m_ctrlList.GetHeaderCtrl()->GetItemCount();i++)   //m_ctrlList为CMyCtrlList 变量       {             m_ctrlList.GetHeaderCtrl()->GetItem(i,&hdItem);             hdItem.fmt |= HDF_OWNERDRAW;             m_ctrlList.GetHeaderCtrl()->SetItem(i,&hdItem);     }/****************************************主程序OnInitDialog函数中**********************************************/ 


[解决办法]

探讨
1楼高手给的代码好像需要做图片,比较麻烦,那个范例看起来比较头晕,不知道怎么直接设置颜色......
请高手详解

2楼的代码俺不知道怎么用,直接把相关的代码加入到程序中不响应CustomDrawItem函数,而且里面还有个m_nItem变量不知道啥意思,还请指教......


3楼的兄弟定义的那个变量CMyListCtrl如何与我的ListControl关联呢?
我程序中是一个单文档的FormView,在Form上我添加了一个ListControl控件
我按照…

[解决办法]
变量CMyListCtrl如何与我的ListControl关联呢? 
//用向导给ListCtrl添加关联变量CListCtrl m_ctrlList ;
//然后把上面的CListCtrl改为CMyListCtrl即可,注意包含头文件


使用SubclassDlgItem和SubclassWindow的时候都报错
//报什么错?
[解决办法]
http://www.pocketpcdn.com/articles/hdr_color.html

这个范例挺不错,而且提供了子类,可以直接拿到代码中使用

热点排行