[MFC]スタティックコントロール(CStatic)の使い方

MFCでスタティックコントロール(ラベルコントロール)を使うにはCStaticを使います。

この記事では、CStaticの基本的な使い方を解説します。

準備

スタティックコントロールを使うためには、まずリソースにスタティックコントロールを貼り付けてメンバ変数化します。

リソースエディタで追加したスタティックコントロールに対して、クラスウィザードまたは右クリックメニューからダイアログクラスのメンバ変数に登録します。

この時、コントロールIDがデフォルトの「IDC_STATIC」のままだとメンバ変数化できないため、任意のコントロールID(ここではIDC_STATIC1)に変更する必要があります。

ここでは変数名を「m_Static」としたので、以降ではm_Staticに対して色々操作を行なっていきます。

位置・サイズの取得、設定

スタティックコントロールに限らず、MFCの扱うウィンドウ・コントロール共通で、位置・サイズの取得を行う場合にはGetClientRect関数を、設定を行う場合にはMoveWindow関数を使用します。

MFC
// 矩形
CRect rc;
// 矩形取得
this->m_Static.GetClientRect(rc);
MFC
// (10, 10)の位置に(200, 20)のサイズで移動・リサイズ
this->m_Static.MoveWindow(10, 10, 200, 20);

コントロールの場合、取得する場合も設定する場合もクライアント座標であることに注意してください。(貼り付けられたダイアログの左上の位置からの相対座標)

テキストの取得、設定

スタティックコントロールに対してテキストの取得を行う場合にはGetWindowText関数を、設定を行う場合にはSetWindowText関数を使用します。

MFC
// テキスト変数
CString text;
// スタティックコントロールからテキスト取得
this->m_Static.GetWindowText(text);
MFC
// テキスト変数
CString text = _T("Hogehoge");
// スタティックコントロールにテキスト設定
this->m_Static.SetWindowText(text);

背景色・文字色を変更する

スタティックコントロールの背景色・文字色を変更する場合には、スタティックコントロールを貼り付けたダイアログクラスのOnCtlColor関数で以下のように記述します。

MFC
HBRUSH CHogeDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
    HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor);

    // 背景色を変更したいスタティックコントロールの場合
    if(pWnd == &this->m_Static)
    {
        // 文字色を赤色に変更
        pDC->SetTextColor(RGB(255, 0, 0));
        // 文字背景色を透明に変更
        pDC->SetBkMode(TRANSPARENT);
        // 背景色を設定したブラシを返却
        return this->m_backBrush;
    }

    return hbr;
}

この時、m_backBrushはメンバ変数としてCBrush型の変数を用意しておく必要があります。

OnCtlColor関数が実施されるたびにCBrush型の変数を生成するとリソースリークが発生する可能性があるので注意してください。

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です