當前位置:編程學習大全網 - 源碼下載 - list控件 改變部分字體顏色?

list控件 改變部分字體顏色?

自己選擇使用下面代碼:

用CListCtrl來顯示數據比較方便,有時候我們需要標註某壹列或某壹個單元格的背景和字體顏色,或者需要改變壹下行高和字體大小, CListCtrl要改變這些並不是很方便。本文將介紹如何派生壹個類來改變CListCtrl及其表頭的高度、字體大小、列背景顏色、單元格背景顏色、 列字體顏色、單元格字體顏色。

壹、 實現過程

1.表頭修改

新建壹個MFC類CHeaderCtrlCl,其基類為CHeaderCtrl,響應OnPaint消息實現自繪,實現代碼請看源代碼(由於代碼較占篇幅,所以就不貼上來了,抱歉),在頭文件中定義函數

LRESULT OnLayout( WPARAM wParam, LPARAM lParam ),之後手動添加消息響應ON_MESSAGE(HDM_LAYOUT, OnLayout),在消息響應中改變高度,實現代碼如下:

LRESULT CHeaderCtrlCl::OnLayout( WPARAM wParam, LPARAM lParam )

{

LRESULT lResult = CHeaderCtrl::DefWindowProc(HDM_LAYOUT, 0, lParam);

HD_LAYOUT &hdl = *( HD_LAYOUT * ) lParam;

RECT *prc = hdl.prc;

WINDOWPOS *pwpos = hdl.pwpos;

int nHeight = (int)(pwpos->cy * m_Height); //改變高度,m_Height為倍數

pwpos->cy = nHeight;

prc->top = nHeight;

return lResult;

}2. 表的修改

新建壹個MFC類CListCtrlCl,其基類為CListCtrl,定義壹個CHeaderCtrlCl的成員變量m_Header,重載PreSubclassWindow(),在函數中修改控件類型為自繪模式,然後子類化表頭,代碼如下:

void CListCtrlCl::PreSubclassWindow()

{

// TODO: 在此添加專用代碼和/或調用基類

ModifyStyle(0,LVS_OWNERDRAWFIXED);

CListCtrl::PreSubclassWindow();

CHeaderCtrl *pHeader = GetHeaderCtrl();

m_Header.SubclassWindow(pHeader->GetSafeHwnd());

}添加成員變量,保存壹些基本信息。CPtrList m_ptrListCol; //保存列顏色

CPtrList m_ptrListItem; //保存Item顏色表

CPtrList m_colTextColor; //保存列字體顏色

CPtrList m_ItemTextColor; //保存單元格字體顏色重載DrawItem()實現自繪,實現代碼請參照代碼。 手動添加消息宏ON_WM_MEASUREITEM_REFLECT(),添加下面的函數,實現修改行高。void CListCtrlCl::MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct)

{

if (m_nRowHeight>0)

{

lpMeasureItemStruct->itemHeight = m_nRowHeight;

}

}添加消息處理OnMeasureItem()void CListCtrlCl::OnMeasureItem(int nIDCtl, LPMEASUREITEMSTRUCT lpMeasureItemStruct)

{

// TODO: 在此添加消息處理程序代碼和/或調用默認值

CListCtrl::OnMeasureItem(nIDCtl, lpMeasureItemStruct);

}覆蓋基類InsertColumn進行列信息保存int CListCtrlCl::InsertColumn(int nCol, LPCTSTR lpszColumnHeading,

int nFormat /* = LVCFMT_LEFT */,

int nWidth /* = -1 */,

int nSubItem /* = -1 */)

{

m_Header.m_HChar.Add(lpszColumnHeading);

if (nFormat==LVCFMT_LEFT)

{

m_Header.m_Format = m_Header.m_Format + "0";

}

else if (nFormat==LVCFMT_CENTER)

{

m_Header.m_Format = m_Header.m_Format + "1";

}

else if (nFormat==LVCFMT_RIGHT)

{

m_Header.m_Format = m_Header.m_Format + "2";

}

else

{

m_Header.m_Format = m_Header.m_Format + "1";

}

return CListCtrl::InsertColumn(nCol,lpszColumnHeading,nFormat,nWidth,nSubItem);

}

三、使用方法

把HeaderCtrlCl.h, HeaderCtrlCl.cpp, ListCtrlCl.h, ListCtrlCl.cpp添加到妳的工程中,在拖壹個CListCtrl控件到對話框上,添加成員變量,然後在頭文件中#include “ListCtrlCl.h”,把剛添加的成員變量類型改為 CListCtrlCl ,在對話框的OnInitDialog()中添加初始化代碼:

m_ListCtrl.SetColColor(0,RGB(10,150,20)); //設置列背景色

m_ListCtrl.SetColColor(2,RGB(30,100,90)); //設置列背景色

m_ListCtrl.SetBkColor(RGB(50,10,10)); //設置背景色

m_ListCtrl.SetItemColor(1,1,RGB(100,100,10)); //設置指定單元背景色

m_ListCtrl.SetRowHeigt(25); //設置行高度

m_ListCtrl.SetHeaderHeight(1.5); //設置頭部高度

m_ListCtrl.SetHeaderFontHW(16,0); //設置頭部字體高度,和寬度,0表示缺省,自適應

m_ListCtrl.SetHeaderTextColor(RGB(255,200,100)); //設置頭部字體顏色

m_ListCtrl.SetTextColor(RGB(0,255,255)); //設置文本顏色

m_ListCtrl.SetHeaderBKColor(100,255,100,8); //設置頭部背景色

m_ListCtrl.SetFontHW(15,0); //設置字體高度,和寬度,0表示缺省寬度

m_ListCtrl.SetColTextColor(2,RGB(255,255,100)); //設置列文本顏色

m_ListCtrl.SetItemTextColor(3,1,RGB(255,0,0)); //設置單元格字體顏色四、結語

  • 上一篇:51單片機用鍵盤輸入並用動態數碼管顯示
  • 下一篇:誰能給我介紹幾本計算機書啊
  • copyright 2024編程學習大全網