win32 APIを使ったC/C++のGUIのwindowsプログラミングでボタン・エディット(テキスト)のフォントを変更するときのメモ書きです。

環境は下の通り。
OS:Windows XP
開発環境:Visual C++ 2008 Express Edition

ボタンなどのフォント変更などをする手順は
①フォントを作成する
②WM_SETFONTをセットしたsendMessage APIでフォント変更のメッセージを送信する
となっています。

最初にサンプロプログラムを下に示します(ウインドウプロシージャ関数のみです)。

#define BUTTON_ID1 0
#define BUTTON_ID2 1

static HWND testButton1, testButton2;

LRESULT CALLBACK WndProc(HWND hwnd , UINT msg , WPARAM wp , LPARAM lp) {
static HFONT hFont1, hFont2;

switch (msg) {
case WM_CREATE:

testButton1 = CreateWindow(
TEXT("BUTTON") , TEXT("ほげ1") ,
WS_CHILD | WS_VISIBLE | BS_DEFPUSHBUTTON ,
5 , 5 , 100 , 30 ,
hwnd , (HMENU)BUTTON_ID1 , ((LPCREATESTRUCT)(lp))->hInstance , NULL
);

testButton2 = CreateWindow(
TEXT("BUTTON") , TEXT("ほげ2") ,
WS_CHILD | WS_VISIBLE | BS_DEFPUSHBUTTON ,
5 , 40 , 100 , 30 ,
hwnd , (HMENU)BUTTON_ID2 , ((LPCREATESTRUCT)(lp))->hInstance , NULL
);

//フォント作成
hFont1 = CreateFont(11, 0, 0, 0,
FW_NORMAL, FALSE, FALSE, 0,
SHIFTJIS_CHARSET,
OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY, DEFAULT_PITCH, "MS Pゴシック");
//デフォルトフォント
hFont2 = (HFONT)GetStockObject(DEFAULT_GUI_FONT);
//フォント変更のメッセージを送信
SendMessage(testButton1, WM_SETFONT, (WPARAM)hFont1, MAKELPARAM(FALSE, 0));
SendMessage(testButton2, WM_SETFONT, (WPARAM)hFont2, MAKELPARAM(FALSE, 0));
return 0;
case WM_DESTROY:
// フォントの削除
DeleteObject(hFont1);
DeleteObject(hFont2);
PostQuitMessage(0);
return 0;
case WM_COMMAND:
switch(LOWORD(wp)) {
case BUTTON_ID1:
MessageBox(hwnd , TEXT("BUTTON_ID1") , TEXT("Kitty") , MB_OK);
break;
case BUTTON_ID2:
MessageBox(hwnd , TEXT("BUTTON_ID2") , TEXT("Kitty") , MB_OK);
break;
}
return 0;
}
return DefWindowProc(hwnd , msg , wp , lp);
}

そして、下の画像が実行結果です。

仕事,ITの忘備録inアメブロ-win32Font

プログラムのポイントについて説明します。

上で「①フォントを作成する」と書きましたが、サンプルプログラムでは二つのフォント作成方法を試みています。

1つはcreateFont API。もう一つはGetStockObject APIによってシステムが最初から用意している定義済みフォントから呼び出す。

どちらの方法でもフォント作成が成功するとHFONT型を返します。

そして、sendMessageでフォント変更メッセージを送信。第一引数はフォント変更の対象コンポーネント、第二引数はフォント変更を知らせるWM_SETFONT、第三引数は①で作成したフォントです。

そして、アプリを終了させるとき(もしくはフォントが必要なくなったとき)にはDeleteObject APIでフォント削除をしましょう。

win32 APIを使ったwindowsプログラミング(C言語)の入門・初心者のためのおすすめ本の紹介

Windowsゲームプログラミング 第2版 Game Developer/赤坂 玲音
¥2,940
Amazon.co.jp

猫でもわかるWindowsプログラミング 第3版 (猫でもわかるプログラミングシリーズ)/粂井 康孝
¥2,940
Amazon.co.jp