如何改变ClistCtrl的背景色

……在MFC编程中像button,static ,dialog 等都可以在窗体的OnCtrlColor(……)中进行修改而达到设置其背景色

然而ClistCtrl 在这种情况下却行不通,下面我来给大家介绍一种解决方法:

(1)重新从CListCtrl派生出一个子类:如CBitmapList

在后在:其.h文件如下:

#pragma once
#include "afxcmn.h"

class CBitmapList :
 public CListCtrl
{
public:
 CBitmapList(void);
 ~CBitmapList(void);
public:
 //afx_msg OnSelectChange();
 //afx_msg OnScroll();
private: 
 CBitmap  m_bitmap; // back bitmap of the control
 CBrush backBrush ;
public:
 afx_msg HBRUSH CtlColor(CDC* pDC, UINT nCtlColor);
 afx_msg BOOL OnEraseBkgnd(CDC* pDC);
 //  the last statement cannot be omitted
 DECLARE_MESSAGE_MAP()

};
(2)在.cpp文件中添加消息映射:

如下所示:

BEGIN_MESSAGE_MAP( CBitmaplist , CListCtrl)

  ON_WM_CTLCOLOR()
 ON_WM_ERASEBKGND()

END_MESSAGE_MAP()

(3)实现函数:

HBRUSH CBitmapList::CtlColor(CDC* pDC, UINT nCtlColor)
{

 // create brush
 backBrush.CreateStockObject( HOLLOW_BRUSH );
 // set teh back mode as transparent
 pDC->SetBkMode( TRANSPARENT );
 // Set Text Color
 pDC->SetTextColor( RGB(120,0,0) );

 return backBrush;
}

BOOL CBitmapList::OnEraseBkgnd(CDC* pDC)
{
 CDC MemDc;
 // create compatible device
 MemDc.CreateCompatibleDC( pDC );
 // select the object to the device
 MemDc.SelectObject( &m_bitmap );
 // the bitmap struct to hold the bitmap information
 BITMAP mapInfo;
 // to get bitmap information
 m_bitmap.GetBitmap( &mapInfo);

 CRect rc;
 // to get control's width and height
 GetClientRect( &rc);
 // to draw the bmp on the specify position
 pDC->StretchBlt( 0,0, rc.Width() ,rc.Height() ,
  &MemDc ,0,0,mapInfo.bmWidth ,
  mapInfo.bmHeight ,SRCCOPY );
 // to releave dc
 ReleaseDC ( &MemDc );
 return TRUE;
}

 (4)如何使用 自己的类:

首先按通常方法绘画自己的相应控件(CListCtrl)到窗体上,然后对该控件添加变量,如:m_list ,类型为control,但类为自己派生的类这里是CBitmapList.

最后还要在Dialog的Oninitial(^)中添加以下代码:

m_list.SubclassDlgItem( IDC_LIST2 ,this );// 主义必须是该函数的开始代码,要不然会出现非法操作警告

这样子,ClistCtrl控件显示的就是自己想要的背景了哦……

转载于:https://www.cnblogs.com/For-her/p/3557055.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值