Windowsの設定では、アイコンのフォントを変えることができます。
このフォントを取得し、ダイアログボックスのフォントとして利用します。
Windows XPの場合、アイコンのデフォルトのフォントは、「MS UI Gothic」ですが、
Windows Vista以降の場合は、「メイリオ」になります。
左下図が、アイコンのフォントを「メイリオ」にした場合です。
右下図が、Windows XPのデフォルトです。
余談ですが、Visual C++ 2008をインストールすれば、「メイリオ」がインストールされます。
テキストの表示 - インコのWindowsSDK で作成したソースをもとに作成します。
流れ
1.LOGFONT構造体を定義。
2.SystemParametersInfo()
SPI_GETICONTITLELOGFONTメッセージで、アイコンのフォントを取得。
SystemParametersInfo()は、Windows環境のパラメータを取得または設定する関数です。
SystemParametersInfo( SPI_GETICONTITLELOGFONT, sizeof(LOGFONT), // LOGFONT構造体のサイズ &logfont, // LOGFONT構造体のアドレス 0); // 0固定
WM_INITDIALOG
リストボックス - インコのWindowsSDK でも説明しましたが、WM_INITDIALOGは、ダイアログが作成されたときに一度だけ実行されます。
3.CreateFont()で、論理フォントを作成。 もしくは、CreateFontIndirect()で、直接フォントハンドルにセット
CreateFont()は、LOGFONT構造体と同じ引数をもちます。
CreateFontIndirect( LOGFONT logfont // LOGFONT構造体のアドレス );
4.WM_SETFONTメッセージをセットし、フォントを変更する。
lResult = SendMessage( (HWND) hWndControl, // プログレスバーのハンドル (UINT) WM_SETFONT, (WPARAM) hFont, // フォントのハンドル (LPARAM) fRedraw // 再描画 );
●hFont : フォントのハンドルを指定。
0 (NULL) を指定すると、デフォルトのシステムフォント
●fRedraw : 1(TRUE)で、直ちに再描画
ソースコードの入力
ソースコードは下記のように入れてください。
#include <windows.h> #include "resource.h" // このコード モジュールに含まれる関数の宣言を転送します: BOOL CALLBACK DialogProc(HWND, UINT, WPARAM, LPARAM); int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR lpCmdLine, int nCmdShow ) { DialogBox(hInstance, TEXT("DIALOG_BOX"), NULL, DialogProc); return 0; } BOOL CALLBACK DialogProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { HFONT hFont; // フォントハンドル LOGFONT logfont; // LOGFONT 構造体 // アイコンのフォントを取得 SystemParametersInfo( SPI_GETICONTITLELOGFONT, sizeof(LOGFONT), &logfont, 0); switch (msg) { case WM_INITDIALOG: hFont = CreateFont(18, // 文字セルまたは文字の高さ 0, // 平均文字幅 0:自動 0, // 文字送りの方向とX軸との角度 0, // ベースラインとX軸との角度 FW_NORMAL, // フォントの太さ FALSE, // イタリック体指定 FALSE, // 下線付き指定 FALSE, // 打ち消し線付き指定 SHIFTJIS_CHARSET, // キャラクタセット OUT_DEFAULT_PRECIS, // 出力精度 CLIP_DEFAULT_PRECIS, // クリッピングの精度 DEFAULT_QUALITY, // 出力品質 (DEFAULT_PITCH | FF_DONTCARE), // ピッチとファミリ logfont.lfFaceName); // フォント名 // hFont = CreateFontIndirect(&logfont); // フォントの装飾(サイズ等)も、アイコンから取得する場合、上記に差し替え SendMessage(GetDlgItem(hWnd, IDC_STATIC1), WM_SETFONT, (WPARAM) hFont, true); break; case WM_CLOSE: EndDialog(hWnd, IDOK); break; } return FALSE; }
#define IDC_STATIC1 1
#ifndef IDC_STATIC
#define IDC_STATIC -1
#endif
Reseditで作成した場合は、これとは異なるソースコードになります。
#include <windows.h>
#include "resource.h"
/////////////////////////////////////////////////////////////////////////////
//
// ダイアログ
//
DIALOG_BOX DIALOG 0, 0, 170, 62
// FONT 9, "MS UI Gothic" // コメントアウト
CAPTION "ダイアログ"
BEGIN
LTEXT "Copyright (C) 2008",IDC_STATIC1,42,26,114,8
END
Reseditで作成した場合は、これとは異なるソースコードになります。