//MFCにてCButtonの色を変えるクラス

//このファイルをヘッダーとして取り込みます。
//CCButton.h
//#include "CCButton.h"

//使用方法
//=========初期設定========
//IDC_BUTTON1を画面に貼り付けて
//VC6では、プロパティーにてオーナー描画に変更しておきます。
//VC.netではプロパティーのOwner Draw を True に変更します。

//CCButton* pButton = new CCButton();
//pButton->SubclassDlgItem(IDC_BUTTON1,this);//サブクラス化による入れ替え
//pButton->RedrawWindow();//再描画

//=========何度でも読み出して色を変えられます==========
//pButton->SetBackGroundColor(RGB(255,0,0));//バックカラー
//pButton->SetFourColor(RGB(0,0,255));//文字の色
//pButton->RedrawWindow();//再描画

class CCButton : public CButton{
private:
	COLORREF cTextColor;
	COLORREF cBkColor;
	COLORREF cDisabledColor;
public:
	CCButton(){
		cTextColor= RGB(0, 0, 0);			//文字の色
		cBkColor= RGB(200,200,200);			//バックカラー
		cDisabledColor= RGB(255,255,255);	// ボタンが無効時
	}
	void SetFourColor(const COLORREF color){cTextColor = color;}
	void SetBackGroundColor(const COLORREF color){cBkColor = color;}
	void SetDisabledColor(const COLORREF color){cDisabledColor = color;}
	COLORREF GetTextColor(){return cTextColor;}
	COLORREF GetBackGroundColor(){return cBkColor;}
	COLORREF GetDisabledColor(){return cDisabledColor;}		
protected:
	void DrawItem(LPDRAWITEMSTRUCT lpDIS){
		CDC* pDC = CDC::FromHandle(lpDIS->hDC);
		CString strCaption;

		UINT nState = lpDIS->itemState; 
		CRect focusRect, btnRect;
		focusRect.CopyRect(&lpDIS->rcItem);
		btnRect.CopyRect(&lpDIS->rcItem); 

		focusRect.left += 4;
		focusRect.right -= 4;
		focusRect.top += 4;
		focusRect.bottom -= 4;

		GetWindowText(strCaption);

		//ボタンの描画
		DrawBkGround(pDC, btnRect, GetBackGroundColor()); 
  		DrawCaption(pDC, btnRect, GetTextColor(),strCaption);
		pDC->DrawEdge(btnRect,EDGE_RAISED,BF_RECT);

		//フォーカスを得たときや選択されているとき
		if (nState & ODS_FOCUS){
			if (nState & ODS_SELECTED){ 
				pDC->DrawEdge(btnRect,EDGE_SUNKEN,BF_RECT);
			}
			pDC->DrawFocusRect(focusRect);
		}else if(nState & ODS_DISABLED){//ボタンが無効であるとき
  			DrawCaption(pDC, btnRect, GetDisabledColor(), strCaption);
		}
	} 
	void DrawBkGround(CDC *pDC, CRect rect,const COLORREF color){ 
		CBrush brush(color);
		pDC->FillRect(rect, &brush);
	}
	void DrawCaption(CDC *pDC, CRect rect,const COLORREF color,const CString& str){
		COLORREF oldcolor = pDC->SetTextColor(color);
		pDC->SetBkMode(TRANSPARENT);
		pDC->DrawText(str,rect,DT_CENTER|DT_VCENTER|DT_SINGLELINE);
		pDC->SetTextColor(oldcolor);
	}
};



▲トップページ > Windows と C++