この記事は2018年12月12日に投稿しました。
目次
1. はじめに
こんにちは、iOSのエディタアプリPWEditorの開発者の二俣です。
今回は業務で使用しているMFCでラベルの背景色、文字色を変更する方法についてです。
2. MFCでラベルの背景色、文字色を変更する
MFCでラベルの背景色、文字色を変更する方法ですが、ラベルのプロパティで変更できません。
OnCtlColorイベントハンドラでコントロールが描画される時に、ラベルなどのコントロールの背景色、文字色を設定します。
今回変更するのは
- ラベルの文字色
- 文字の背景色
- ラベルの背景色
になります。
以下がラベルの背景色、文字色を変更する手順です。
- メンバ変数にラベルの背景色を塗りつぶすCBrush変数を用意します。
- OnInitialDialogイベントハンドラで"1で用意したブラシ"を生成します。
- 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; }
実行結果
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