关闭

Button显示颜色

591人阅读 评论(0) 收藏 举报

.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);
 }

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:34068次
    • 积分:545
    • 等级:
    • 排名:千里之外
    • 原创:15篇
    • 转载:0篇
    • 译文:5篇
    • 评论:4条
    最新评论