プログラムを書こう!

実務や自作アプリ開発で習得した役に立つソフトウェア技術情報を発信するブログ

MFCでラベルの背景色、文字色を変更する。

この記事は2018年12月12日に投稿しました。

f:id:paveway:20190914064630j:plain

目次

  1. はじめに
  2. MFCでラベルの背景色、文字色を変更する
  3. おわりに

1. はじめに

こんにちは、iOSのエディタアプリPWEditorの開発者の二俣です。
今回は業務で使用しているMFCでラベルの背景色、文字色を変更する方法についてです。

目次へ

2. MFCでラベルの背景色、文字色を変更する

MFCでラベルの背景色、文字色を変更する方法ですが、ラベルのプロパティで変更できません。
OnCtlColorイベントハンドラでコントロールが描画される時に、ラベルなどのコントロールの背景色、文字色を設定します。

今回変更するのは

  • ラベルの文字色
  • 文字の背景色
  • ラベルの背景色

になります。

以下がラベルの背景色、文字色を変更する手順です。

  1. メンバ変数にラベルの背景色を塗りつぶすCBrush変数を用意します。
  2. OnInitialDialogイベントハンドラで"1で用意したブラシ"を生成します。
  3. OnCtlColorイベントハンドラで、対象のラベルに対して文字色、文字の背景色を設定します。 ラベルの背景色は、"1で生成したブラシ"をOnCtlColorイベントハンドラの戻り値で返却することで設定されます。

実装例

ラベルのIDはIDC_LABELとします。

SampleLabelColorDlg.h

class CSampleLabelColorDlg : public CDialogEx
{
...
protected:
    virtual BOOL OnInitDialog();
    DECLARE_MESSAGE_MAP()
public:
    afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);

private:
    CBrush m_black; // ラベルの背景色用のブラシ(黒色)
...
};

SampleLabelColorDlg.cpp

BOOL CSampleLabelColorDlg::OnInitDialog()
{
    CDialogEx::OnInitDialog();

    // ラベルの背景色用のブラシを黒色で生成します。
    m_black.CreateSolidBrush(RGB(0, 0, 0));
}

HBRUSH CSampleLabelColorDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
    // 親クラスの関数を呼び出します。
    HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor);

    // コントロールのIDを取得します。
    int id = pWnd->GetDlgCtrlID();
    switch (id)
    {
    // ラベルの場合
    case IDC_LABEL:
        // 文字色を赤に設定します。
        pDC->SetTextColor(RGB(255, 0, 0));

        // 文字の背景を青に設定します。
        pDC->SetBkColor(RGB(0, 0, 255));
        // 文字の背景をラベルの背景色に合わせる場合、代わりに
        // pDC->SetBkMode(TRANSPARENT)を設定します。

        // ラベルの背景色用ブラシ(黒色)を返却します。
        return m_black;
        break;

    default:
        break;
    }

    // 上記以外はデフォルトのブラシを返却します。
    return hbr;
}

実行結果

f:id:paveway:20181211215336p:plain
実行結果

目次へ

3. おわりに

ラベルの背景色や文字色を変更するのは、ラベルのプロパティでできると思ったのですがそうではありませんでした。
実際はコードで書かなくてはならず、わかりずらいし、めんどくさいです。

紹介している一部の記事のコードはGitlabで公開しています。
興味のある方は覗いてみてください。

目次へ


私が勤務しているニューラルでは、主に組み込み系ソフトの開発を行っております。
弊社製品のハイブリッドOS Bi-OSは高い技術力を評価されており、特に制御系や通信系を得意としています。
私自身はiOSモバイルアプリウィンドウズアプリを得意としております。
ソフトウェア開発に関して相談などございましたら、お気軽にご連絡ください。

また一緒に働きたい技術者の方も随時募集中です。
興味がありましたらご連絡ください。

EMAIL : info-nr@newral.co.jp / m-futamata@newral.co.jp
TEL : 042-523-3663
FAX : 042-540-1688

目次へ