1. 程式人生 > >設定CListCtrl某一行背景顏色

設定CListCtrl某一行背景顏色

三個介面函式,設定某一行的文字顏色(前景色)和背景色,使用說明都放在註釋裡了,建立的列表要使用該類宣告,如:CColorListCtrl m_List;

那麼使用時,直接通過m_List.SetItemColor(1,RGB(0,0,0),RGB(255,255,255));設定顏色即可

ColorListCtrl.h

#pragma once
#include "afxcmn.h"
typedef struct    
{  
	COLORREF colText;  
	COLORREF colTextBk;  
}TEXT_BK; 

class CColorListCtrl :public CListCtrl
{
public:
	CColorListCtrl();
	~CColorListCtrl();
public:
	void SetItemColor(DWORD iItem, COLORREF TextColor, COLORREF TextBkColor);   //設定某一行的前景色和背景色
	void SetAllItemColor(DWORD iItem, COLORREF TextColor, COLORREF TextBkColor);//設定全部行的前景色和背景色  
	void ClearColor();                                                          //清除顏色對映表 
	CMap<DWORD, DWORD&, TEXT_BK, TEXT_BK&> MapItemColor;  
protected:
	//{{AFX_MSG(CColorListCtrl)
	//}}AFX_MSG  
	void CColorListCtrl::OnNMCustomdraw(NMHDR *pNMHDR, LRESULT *pResult); 
	DECLARE_MESSAGE_MAP() 
};


ColorListCtrl.cpp:

#include "StdAfx.h"
#include "ColorListCtrl.h"
CColorListCtrl::CColorListCtrl()
{
}
CColorListCtrl::~CColorListCtrl()
{
}
BEGIN_MESSAGE_MAP(CColorListCtrl, CListCtrl)
	//{{AFX_MSG_MAP(CLineColorListCtrl)
	// NOTE - the ClassWizard will add and remove mapping macros here.
	//}}AFX_MSG_MAP
	ON_NOTIFY_REFLECT(NM_CUSTOMDRAW, OnNMCustomdraw)
END_MESSAGE_MAP()

void CColorListCtrl::OnNMCustomdraw(NMHDR *pNMHDR, LRESULT *pResult)  
{  
	// TODO: Add your control notification handler code here   
	*pResult = CDRF_DODEFAULT;  
	NMLVCUSTOMDRAW * lplvdr=(NMLVCUSTOMDRAW*)pNMHDR;  
	NMCUSTOMDRAW &nmcd = lplvdr->nmcd;  
	switch(lplvdr->nmcd.dwDrawStage)//判斷狀態   
	{  
	case CDDS_PREPAINT:  
		{  
			*pResult = CDRF_NOTIFYITEMDRAW;  
			break;  
		}  
	case CDDS_ITEMPREPAINT://如果為畫ITEM之前就要進行顏色的改變   
		{  
			TEXT_BK tb;

			if(MapItemColor.Lookup(nmcd.dwItemSpec, tb))  
				// 根據在 SetItemColor(DWORD iItem, COLORREF color) 設定的   
				// ITEM號和COLORREF 在摸板中查詢,然後進行顏色賦值。   
			{  
				lplvdr->clrText = tb.colText;   
				lplvdr->clrTextBk = tb.colTextBk;  
				*pResult = CDRF_DODEFAULT;  
			}  
		}  
		break;  
	}  
}  
void CColorListCtrl::ClearColor()
{
	MapItemColor.RemoveAll();
}
void CColorListCtrl::SetItemColor(DWORD iItem, COLORREF TextColor, COLORREF TextBkColor)
{  
	TEXT_BK tb;
	tb.colText = TextColor;
	tb.colTextBk = TextBkColor;


	MapItemColor.SetAt(iItem, tb);//設定某行的顏色。   
	this->RedrawItems(iItem, iItem);//重新染色   

	//this->SetCheck(iItem,1);   
	this->SetFocus();    //設定焦點   
	UpdateWindow();  
}  
void CColorListCtrl::SetAllItemColor(DWORD iItem, COLORREF TextColor, COLORREF TextBkColor)  
{  
	//INT_PTR ncount = this->GetItemCount();
	TEXT_BK tb;
	tb.colText = TextColor;
	tb.colTextBk = TextBkColor;

	if(iItem > 0)  
	{  
		for(DWORD numItem = 0; numItem < iItem ;numItem ++)  
		{  
			//iItem = i;   
			MapItemColor.SetAt(numItem, tb);  
			this->RedrawItems(numItem, numItem);  
		}  
	}  
	return;  
}  

相關推薦

設定CListCtrl一行背景顏色

三個介面函式,設定某一行的文字顏色(前景色)和背景色,使用說明都放在註釋裡了,建立的列表要使用該類宣告,如:CColorListCtrl m_List; 那麼使用時,直接通過m_List.SetItemColor(1,RGB(0,0,0),RGB(255,255,255))

[ASP.NET] GridView 依條件更改背景顏色

protected void gvList_RowDataBound(object sender, GridViewRowEventArgs e) { DataRowView drv = (DataRowView)e.Row.DataItem; if ((e.Ro

改變CListCtrl行的顏色

指定改變CListCtrl中某一行的顏色,比如說剛新增進去的一行,讓它改變顏色,這樣記錄多了,容易看到自己剛剛加如的行,方便操作可檢視,也可以讓新增和修改的記錄顯示不一樣的顏色,方便的多了,VC自帶的沒有這種功能。 1.首先從CListCtrl 繼承一個類,命名為CXLi

指定改變ListCtrl中一行顏色

1.首先從CListCtrl 繼承一個類,命名為CXListCtrl 在標頭檔案中加印射 CMap<DWORD, DWORD&, COLORREF, COLORREF&> MapItemColor; 好在這裡查詢你的修改的顏色。 2.自己寫個訊息對映,可能新增不上,要自己寫。 BE

【easyui】 datagrid動態改變一行顏色

直接上程式碼: $(function () { dataGridAccept = $('#dataGridAccept').datagrid({

eclipse如何設定導航欄的背景顏色

第一步: 下載需要使用的樣式: http://download.csdn.net/download/weixin_38388991/10050428 第二步: 去在eclipse的安裝目錄中找到\eclipse\configuration\org.eclipse.e4.ui.cs

簡單記錄,設定一體化狀態列背景顏色的方法

/** * 設定一體化狀態列顏色 * @param activity * @param color 狀態列顏色 */ public static void setStatusBarTint(Activity activity

extjs 更改grid一行顏色

extjs 3.2.1更改grid某一行的樣式是非常的簡便: 以下以更改某一行的背景色作例子: 首先定義CSS:如下:    <style type="text/css">           .price-fall table{               

IOS_設定UITableView Section的背景顏色和字型顏色(自定義section佈局)

section所顯示的灰色背景和白色字型是預設的,呼叫以下方法即可實現- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section { ret

怎麼設定控制檯前景和背景顏色

dos指令 :color [attr] 其中 attr        指定控制檯輸出的顏色屬性 顏色屬性由兩個十六進位制數字指定 -- 第一個為背景,第二個則為前景。 每個數字可以為以下任何值之一

設定static控制元件背景顏色、控制元件字型的背景顏色和控制元件字型的顏色

注:轉載至:https://my.oschina.net/u/241930/blog/528285,謝謝該博主的分享 #include <windows.h> LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPAR

UICollectionView 設定不同的 Section 背景顏色

UICollectionView 無法通過屬性設定或資料來源來為不同的 Section 設定不同的背景顏色,要想達到這樣的效果就需要自定義自己的佈局物件(UICollectionViewLayout)。自定義佈局可以完全自定義佈局,但這裡我們只繼承 UIColl

Android設定Dialog對話方塊背景顏色圓角

這個設定背景圓角方法也適用於普通View。 ProgressDialog dialog = new ProgressDialog(mContext); dialog.getWindow().setBackgroundDrawable(setDialogBack(16, 16,

intellij idea windows版本設定編輯器的背景顏色

我在官網下的windows版本的在更改編輯器 的背景色的時候點選 general --> color fonts 並沒有網上說的直接有 defaul text選項。如圖。發現原來只有mac版本的才有這個選項。 後來發現 在text選單下面有個default tex

jqgrid改變一行背景顏色

想要在jqgrid表格中更改某些行的背景顏色,比如改變“提示”是0的這些行的背景顏色為紅色。 <!DOCTYPE html> <html> <head> <title>jqGrid 例項</title&g

datatable為設定背景顏色

沒啥可說的,直接上程式碼 //每行回撥函式 "fnRowCallback": function( nRow, aData, iDisplayIndex, iDisp

SDK ListView改變一行一列的文字顏色/背景顏色

註冊視窗類,CreateWindowEx建立視窗,同樣用這個函式建立一個ListView,新增一些ITEM。 在視窗訊息處理函式中處理WM_NOTIFY的NM_CUSTOMDRAW訊息,程式碼框架如下 LRESULT DoMsg(HWND hWnd, UINT uMsg,

設置LISTControl控件一行背景和文字顏色

處理 stage 標識 定義宏 ngx lan cdr 自定義屬性 define 定義宏 用listcontrol的SetItemData設置某一行的屬性,通過自定義屬性標識實現。 自定義某行內容顏色屬性: #define COLOR_DEFAULT 0 //默認顏色 #d

MyEclipse中背景顏色設定

定位在 edi col div ref spa 操作 -c cli 設置代碼編寫區域背景色的方法:Window——>Preferences——>General——>Editors——>TextEditors——>在Appearance co

jsp根據一行顏色來其他行的顏色

單選框 單選 其他 color gre == test nbsp black jsp根據某一行顏色(單選框)來其他行的顏色 <c:choose> <c:when test="${v.color==‘黑色‘ }"> <td s