フォントを選択する

VC++ の ChooseFont() でフォントと色を選択して TEXT を表示します。

前田稔(Maeda Minoru)の超初心者のプログラム入門

プロジェクトの設定

  1. 新規プロジェクトを作成して、メニューを設定して下さい。
    キャプションID
    FILE(&F) 親メニュー
    終了(&X) IDM_EXIT
    &Test! IDM_TEST
  2. if は現在選択されているフォントの領域です。
    dwColor はフォントと同時に設定するカラーで、最初は黒(0)に設定されています。
        LOGFONT     lf;
        DWORD       dwColor = 0;
        
  3. WM_CREATE: でフォントの領域をクリアします。
            case WM_CREATE:
                memset(&lf,0,sizeof(LOGFONT));
                break;
        
  4. WM_PAINT: では lf にフォントが選択されているときフォントを設定して "Sample Text" を表示します。
    フォントが選択されていない時は "Test! で FONT を選択" を表示します。
    描画が終わると生成したフォントを削除して下さい。
    フォントの設定と TEXT の表示は 文字フォントを設定して描画する を参照して下さい。
            case WM_PAINT:
                hdc= BeginPaint(hWnd,&ps);
                if (lf.lfFaceName[0])
                {   // フォントを設定してテキストを表示する。
                    hFont= CreateFontIndirect(&lf);
                    hOldFont= (HFONT)SelectObject(hdc,hFont);
                    dwOldColor= SetTextColor(hdc,dwColor);
                    TextOut(hdc,10,10,"Sample Text",11);
                    SelectObject(hdc,hOldFont);
                    SetTextColor(hdc,dwOldColor);
                    DeleteObject(hFont);
                }
                else    TextOut(hdc,10,10,"Test! で FONT を選択",20);
                EndPaint(hWnd, &ps);
                break;
        
  5. ChooseFont() でフォントを選択して lf に保存します。
    同時にフォントの色を dwColor に保存します。
    CF_INITTOLOGFONTSTRUCT は lf のフォントを初期画面に表示するフラグです。
        {   case IDM_TEST:
                {   CHOOSEFONT cf;
                    memset(&cf,0,sizeof(CHOOSEFONT));
                    cf.lStructSize  = sizeof(CHOOSEFONT);
                    cf.hwndOwner    = hWnd;
                    cf.lpLogFont    = &lf;
                    cf.Flags        = CF_SCREENFONTS | CF_EFFECTS;
                    cf.rgbColors    = dwColor;
                    if (lf.lfFaceName[0])
                        cf.Flags |= CF_INITTOLOGFONTSTRUCT;
                    // [フォントの指定]ダイアログを作成する。
                    if (ChooseFont(&cf))
                    {   //選択したフォントで再描画する。
                        dwColor = cf.rgbColors;
                        InvalidateRect(hWnd,NULL,TRUE);
                    }
                }
                break;
        
  6. IDM_EXIT: でプログラムを終了します。
            case IDM_EXIT:
                DestroyWindow(hWnd);
                break;
        
  7. C# でも同様のプログラムを作成しています。
    超初心者のプログラム入門(C#)から Font Dialog を参照して下さい。
    リンクがエラーになるときは「前田稔の超初心者のプログラム入門」から辿って下さい。

超初心者の方のために全ソースコードを掲載します。 (^_^;)
全ソースコード

超初心者のプログラム入門(Win32API C++)