おいちゃんのおぼえがき

仕事のTipsをメモするブログ

MFC チェックボックスの背景色

2009-08-27 | Win
ColorButton.h

class CColorButton : public CButton {
DECLARE_DYNAMIC(CColorButton)

private:
int m_check; // チェック状態は自分で管理

public:
CColorButton();
virtual ~CColorButton();
afx_msg void OnClicked();

protected:
virtual void DrawItem(LPDRAWITEMSTRUCT lpDIS); // ボタンのオーナー描画

DECLARE_MESSAGE_MAP()
};

#endif // _ColorButton_h_

--------------------------------------------------------------------------
ColorButton.cpp
#include "stdafx.h"
#include "ColorButton.h"

IMPLEMENT_DYNAMIC(CColorButton, CButton)

BEGIN_MESSAGE_MAP(CColorButton, CButton)
ON_CONTROL_REFLECT(BN_CLICKED, OnClicked)
END_MESSAGE_MAP()

CColorButton::CColorButton()
{
m_check = 0;
}

CColorButton::~CColorButton()
{
}

void CColorButton::OnClicked()
{
if (m_check == 0) m_check = BST_CHECKED;
else m_check = BST_UNCHECKED;
}

// ボタンのオーナー描画
void CColorButton::DrawItem(LPDRAWITEMSTRUCT lpDIS)
{
CDC* pDC = CDC::FromHandle(lpDIS->hDC);
CString capt;

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(capt);

// ボタンの描画(背景色、エッジ、キャプション)
if (m_check == BST_CHECKED) color = RGB(255, 0, 0);
else color = RGB(0, 0, 255);
CBrush brush(color);

// チェックされているとき
if (m_check == BST_CHECKED) {
pDC->DrawEdge(btnRect,EDGE_BUMP,BF_RECT);
} else {
pDC->DrawEdge(btnRect,EDGE_RAISED,BF_RECT);
}
pDC->FillRect(btnRect, &brush);
pDC->SetTextColor(RGB(255, 255, 255));
pDC->DrawText(capt, btnRect, DT_CENTER|DT_VCENTER);

// フォーカスを得たときや選択されているとき
if (nState & ODS_FOCUS) {
if (nState & ODS_SELECTED) {
pDC->DrawEdge(btnRect,EDGE_SUNKEN,BF_RECT);
}
pDC->DrawFocusRect(focusRect);
}
else if (nState & ODS_CHECKED) {
pDC->DrawEdge(btnRect,EDGE_BUMP,BF_RECT);
}
}
この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« CEditでの背景色設定 | トップ | 文字列ポインタを引数にとる関数 »

Win」カテゴリの最新記事