//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++