Button显示颜色

.h文件

// ecolorbtn.h : ヘッダー ファイル
//
#ifndef _ECOLOR_BUTTON_
#define _ECOLOR_BUTTON_

class EColorBtn : public CButton
{
// コンストラクション
public:
  EColorBtn( );
  ~EColorBtn( );
// アトリビュート
public:
  void SetColor(COLORREF rgbColor,BOOL bActive);
  void ESetDrawPal( CPalette *pPal );
  COLORREF GetColor();
protected:
  COLORREF m_rgbColor;
  COLORREF m_rgbActive;
  BOOL m_bActive;
 
  CPalette *m_pDrawPal;

// オペレーション
public:

// オーバーライド
 // ClassWizard は仮想関数を生成しオーバーライドします。
 //{{AFX_VIRTUAL(EColorBtn)
 public:
 virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);
 virtual BOOL Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext = NULL);
 //}}AFX_VIRTUAL

// インプリメンテーション
public:

 // 生成されたメッセージ マップ関数
protected:
 //{{AFX_MSG(EColorBtn)
 //}}AFX_MSG

 DECLARE_MESSAGE_MAP()
public:
};

#endif

.cpp文件

// ecolorbtn.cpp : インプリメンテーション ファイル
//

#include "stdafx.h"
#include "ecolorbtn.h"
#include "./ecolorbtn.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// EColorBtn

EColorBtn::EColorBtn()
{
  m_pDrawPal = NULL;
}

EColorBtn::~EColorBtn()
{
}


BEGIN_MESSAGE_MAP(EColorBtn, CButton)
 //{{AFX_MSG_MAP(EColorBtn)
 //}}AFX_MSG_MAP
// ON_WM_DRAWITEM()
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// EColorBtn メッセージ ハンドラ

void EColorBtn::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
  CDC *cdc = GetDC();
  BYTE byR, byG, byB;
  CPalette *pOldPal = NULL;

  if ( m_pDrawPal != NULL ){
    pOldPal = cdc->SelectPalette( m_pDrawPal, FALSE );
    cdc->RealizePalette( );
  }
 
  byR = GetRValue( m_rgbColor );
  byG = GetGValue( m_rgbColor );
  byB = GetBValue( m_rgbColor );


  CBrush brush( PALETTERGB( byR, byG, byB ) );
  CRect rect;
 
  GetClientRect(&rect);
 
  cdc->FillRect( &rect, &brush );
 
  if(m_bActive == TRUE){    //Active
    CBrush Framebrush(PALETTERGB(255-GetRValue(m_rgbColor),255-GetGValue(m_rgbColor),
     255-GetBValue(m_rgbColor)));
    cdc->FrameRect( &rect, &Framebrush );
  }
 
  if ( pOldPal != NULL ){
    cdc->SelectPalette( pOldPal, FALSE );
  }

  ReleaseDC(cdc);
}

void EColorBtn::SetColor(COLORREF rgbColor,BOOL bActive)
{
 m_rgbColor = rgbColor;
 m_bActive = bActive;
 Invalidate();
}

COLORREF EColorBtn::GetColor()
{
 return m_rgbColor;
}


BOOL EColorBtn::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext)
{
 m_rgbColor = RGB(0,255,0);
 m_rgbActive = RGB(0,0,255);
 m_bActive = FALSE;

 return CWnd::Create(lpszClassName, lpszWindowName, dwStyle, rect, pParentWnd, nID, pContext);
}


void EColorBtn::ESetDrawPal( CPalette *pPal )
{
  m_pDrawPal = pPal;
}

应用例子:

 CColorDialog _colDlg;
 INT_PTR  _response = _colDlg.DoModal();
 if(_response == IDOK)
 {
  _color = _colDlg.GetColor();
  _colorBtn.SetColor(_color, TRUE);
 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值