Tips of VC++ > フォント > フォントをポイントサイズで指定するには
★ 前へ戻る ★ 次へ進む ★


このドキュメントにはサンプルプログラムが含まれています。
ワークスペース
ソースファイル(テキスト)


フォントをポイントサイズで指定するには

通常、フォントは幅と高さを指定して作成しますが、 ポイントサイズで作成したい場合があります。 ポイントサイズと幅・高さの関係には式があって それを使います。

ポイントサイズをptsizeとおくと、 そのフォントの幅は以下のような式で表されます。よく分からないけど、丸暗記(^^;
::MulDiv(ptsize,-GetDeviceCaps(LOGPIXELSY),72)

上の式を利用して、エディットボックスのフォントを 「MS ゴシック」の9ポイントに設定して等幅フォントを作ります。
ウィンドウのクライアント領域にエディットボックスを貼り付け、 そのエディットボックスのフォントを変更します。

static HFONT hFont=NULL;

case WM_CREATE:
    RECT rect;
    ::GetClientRect(in_hWnd,&rect);

    HWND hEdit;
    hEdit=::CreateWindowEx(WS_EX_CLIENTEDGE,"EDIT","ABCDE 12345 +-*/",
        WS_CHILD | WS_VISIBLE | ES_READONLY,
        0,0,rect.right-rect.left,rect.bottom-rect.top,
        in_hWnd,(HMENU)IDC_EDIT1,hAppModule,0);

    HDC hDC;
    hDC=::GetDC(in_hWnd);

    hFont=::CreateFont(
        ::MulDiv(9,-::GetDeviceCaps(hDC,LOGPIXELSY),72),
        0,0,0,FW_NORMAL,0,0,0,SHIFTJIS_CHARSET,
        OUT_STROKE_PRECIS,CLIP_STROKE_PRECIS,DRAFT_QUALITY,
        VARIABLE_PITCH | FF_SWISS,"MS ゴシック");
    ::SendMessage(hEdit,WM_SETFONT,(WPARAM)hFont,MAKELONG(TRUE,0));

    ::ReleaseDC(in_hWnd,hDC);

    break;

SendMessageでWM_SETFONTを送ってフォントを設定します。 この後すぐにDeleteObjectでフォントハンドルを削除したくなりますが、 そうすると失敗します。 HFONTを静的変数にしてWM_DESTROYあたりで削除するのがミソ。