次の方法で共有


[フォント] ダイアログ ボックス

[ フォント ] ダイアログ ボックスでは、フォント ファミリや関連するフォント スタイル、ポイント サイズ、効果 (下線、取り消し線、テキストの色)、スクリプト (または文字セット) など、論理フォントの属性を選択できます。

CHOOSEFONT 構造体を初期化し、その構造体を ChooseFont 関数に渡すことで、[フォント] ダイアログ ボックスを作成して表示します。

次のスクリーン ショットは、一般的な [フォント ] ダイアログ ボックスを示しています。

[フォント] ダイアログ ボックスを示すスクリーン ショット

ユーザーが [OK] ボタンをクリックすると、 ChooseFont 関数は TRUE を 返し、 CHOOSEFONT 構造体でのユーザーの選択に関する情報を設定します。

ユーザーが [ フォント ] ダイアログ ボックスを取り消すか、エラーが発生した場合、 ChooseFontFALSE を 返し、 LOGFONT 構造体の内容は定義されていません。 CommDlgExtendedError 関数を使用して拡張エラー値を取得することで、エラーの原因を特定できます。

このセクションでは、次のトピックについて説明します。

[フォント] ダイアログ ボックスの初期化フラグ

ChooseFont を呼び出す前に、CHOOSEFONT 構造体の Flags メンバーは、画面フォント、プリンター フォント、またはその両方をダイアログ ボックスに一覧表示するかどうかを示すために、CF_SCREENFONTS、CF_PRINTERFONTS、またはCF_BOTHを指定する必要があります。 CF_PRINTERFONTSまたはCF_BOTHを指定する場合、CHOOSEFONT 構造体の hDC メンバーは、プリンターのデバイス コンテキストへのハンドルを指定する必要があります。

CF_PRINTERFONTSまたはCF_BOTH フラグが設定されている場合は、[フォント] ダイアログ ボックスの下部にフォントの種類の説明ラベルが表示されます。

Windows 7 以降では、フォント列挙の ChooseFont 関数では、CF_PRINTERFONTSCF_SCREENFONTS、CF_BOTHおよびCF_WYSIWYGフラグは使用されなくなりました。 Windows 7 では使用されていません。 ただし、 CF_PRINTERFONTS フラグは、フォントの種類の説明ラベル を [フォント ] ダイアログ ボックスの下部に表示する 1 つの関数を保持します。

Flags メンバーを使用すると、一部の [フォント] ダイアログ ボックス コントロールを有効または無効にできます。また、Flags メンバーを他の CHOOSEFONT メンバーと組み合わせて使用して、一部のコントロールの初期値を制御できます。

ユーザーが取り消し線、下線、色のオプションを選択できるようにするコントロールを表示するには:

  • CF_EFFECTS フラグを設定します。 CHOOSEFONT 構造体の rgbColors メンバーを使用して、初期フォントの色を指定できます。

[フォント]、[フォント スタイル]、[サイズ]、[取り消し線]、[下線] ダイアログ ボックス コントロールの初期値を指定するには:

  1. [フォント]、[フォント スタイル]、[サイズ]、[取り消し線]、[下線] ダイアログ ボックス コントロールの初期値を指定するには:
  2. フォント属性の初期値を指定するには、flags メンバーのCF_INITTOLOGFONTSTRUCT フラグと lpLogFont が指す LOGFONT 構造体のメンバーを設定します。
  3. CF_NOFACESELCF_NOSTYLESELおよびCF_NOSIZESELフラグを使用して、[フォント] ダイアログ ボックスに対応するコントロールの初期値が表示されないようにすることもできます。 これは、複数の書体、スタイル、またはポイント サイズを持つテキストの選択を操作する場合に便利です。 これらの値は、ユーザーが対応する値を選択しなかった場合、ChooseFont が返されるときに Flags にも設定されます。

フォント スタイル コントロールを指定したスタイル名に初期化するには

  • CF_USESTYLE フラグを設定し、lpszStyle メンバーを使用してスタイル名を指定します。

Note

アプリケーションをグローバル化するには、lpLogFont が指す LOGFONT 構造体の lfWeight メンバーと lfItalic メンバーを使用してスタイルを指定します。 スタイル名は、システム ユーザー インターフェイスの言語によって変更される場合があります。

 

[適用] ボタンを表示するには

  • CF_APPLY フラグを設定し、[適用] ボタンのメッセージWM_COMMAND処理するフック プロシージャを指定します。 フック プロシージャは、 WM_CHOOSEFONT_GETLOGFONT メッセージをダイアログ ボックスに送信して、フォントの現在の選択内容を含む LOGFONT 構造体のアドレスを取得できます。

[ヘルプ] ボタンを表示するには

  • CF_SHOWHELP フラグを設定します。 hwndOwner メンバーは、ユーザーが [ヘルプ] ボタンをクリックしたときに HELPMSGSTRING 登録済みメッセージを受信するウィンドウを識別する必要があります。

ダイアログ ボックスに表示されるフォントを制限するには

  • CF_TTONLYCF_FIXEDPITCHONLY、CF_NOVECTORFONTSCF_NOVERTFONTSCF_SCALABLEONLYおよびCF_WYSIWYGフラグの任意の組み合わせを設定します。 CF_NOSIMULATIONS 値を 使用して、一部のフォントに対してダイアログ ボックスに表示される使用可能なスタイルを制限することもできます。

Windows 7 以降では、ダイアログ ボックスに表示されるフォントの一覧は、ユーザーの表示されるフォントに基づいて制限されます。 制限を解除するには、 CF_INACTIVEFONTS フラグを設定します。

ユーザーが指定できるタイプフェイスの名前、スタイル、およびポイント サイズを制限するには

  1. CF_FORCEFONTEXIST フラグを設定して、ダイアログ ボックスに表示される有効な書体名、スタイル、およびポイント サイズのみを指定するようにユーザーを制限します。
  2. CF_LIMITSIZE フラグを設定して、ユーザーが nSizeMin メンバーと nSizeMax メンバーによって指定された範囲内のポイント サイズを指定するように制限します。

[スクリプト] コンボ ボックスを制限または無効にするには

  • CF_NOSCRIPTSEL フラグを設定して [スクリプト] コンボ ボックスを無効にするか、CF_SELECTSCRIPT フラグを設定して [スクリプト] コンボ ボックスの選択を指定した文字セットに制限します。

以前のバージョンの Windows での [フォント] ダイアログ ボックスのカスタマイズ

たとえば、アプリケーションに固有の追加のコントロールを含める場合は、[ フォント ] ダイアログ ボックスにカスタム テンプレートを指定できます。 ChooseFont 関数は、既定のテンプレートの代わりにカスタム テンプレートを使用します。

[フォント] ダイアログ ボックスのカスタム テンプレートを指定するには

  1. Font.dlg ファイルで指定された既定のテンプレートを変更して、カスタム テンプレートを作成します。 既定の [フォント] ダイアログ テンプレートで使用されるコントロール識別子は、Dlgs.h ファイルで定義されます。
  2. CHOOSEFONT 構造体を使用して、次のようにテンプレートを有効にします。
    • カスタム テンプレートがアプリケーションまたはダイナミック リンク ライブラリのリソースである場合は、Flags メンバーで CF_ENABLETEMPLATE フラグを設定します。 構造体の hInstance メンバーと lpTemplateName メンバーを使用して、モジュールとリソース名を識別します。
    • カスタム テンプレートが既にメモリ内にある場合は、 CF_ENABLETEMPLATEHANDLE フラグを設定します。 hInstance メンバーを使用して、テンプレートを含むメモリ オブジェクトを識別します。

[フォント] ダイアログ ボックスには CFHookProc フック プロシージャを指定できます。 フック プロシージャでは、ダイアログ ボックスに送信されたメッセージを処理し、ダイアログ ボックスにメッセージを送信できます。 カスタム テンプレートを使用して追加のコントロールを定義する場合は、コントロールの入力を処理するためのフック プロシージャを指定する必要があります。

[フォント] ダイアログ ボックスのフック プロシージャを有効にするには

  1. CHOOSEFONT 構造体の Flags メンバーにCF_ENABLEHOOK フラグを設定します。
  2. lpfnHook メンバーでフック・プロシージャーのアドレスを指定します。

WM_INITDIALOG メッセージを処理した後、ダイアログ ボックス プロシージャはWM_INITDIALOGメッセージをフック プロシージャに送信します。 このメッセージの lParam パラメーターは、ダイアログ ボックスの初期化に使用される CHOOSEFONT 構造体へのポインターです。

フック プロシージャは、ダイアログ ボックスに WM_CHOOSEFONT_GETLOGFONTWM_CHOOSEFONT_SETLOGFONTおよびWM_CHOOSEFONT_SETFLAGS メッセージを送信して、ダイアログ ボックスの現在の値とフラグを取得および設定できます。

Windows 7 の [フォント] ダイアログ ボックスのカスタマイズ

次のスクリーン ショットは、Windows 7 の一般的な [フォント ] ダイアログ ボックスを示しています。

フォント の dialob ボックスを示すスクリーン ショット

以前のバージョンの Windows では、font.dlg テンプレート ファイルには既定の ChooseFont テンプレートが 1 つ含まれています。 Windows 7 の font.dlg テンプレート ファイルには、以前のバージョンの Windows の既定のテンプレートと新しい Windows 7 ChooseFont テンプレートの 2 つの既定のテンプレートが含まれています。 したがって、Windows 7 の [ フォント ] ダイアログ ボックスをカスタマイズする場合は、次の問題を考慮する必要があります。

  1. Windows 7 で実行されるアプリケーション用のカスタム テンプレートを作成するときは、新しいテンプレートを使用します。 この新しいテンプレートには、次のスクリーン ショットに示すように、ユーザーがクリックして [フォントコントロール パネル] ウィンドウを起動できるリンク コントロールが含まれています。

    ウィンドウ 7 のフォント コントロール パネルを示すスクリーン ショット

  2. このリンク コントロールを使用するには、呼び出し元のアプリケーションで COMCTL32.DLL バージョン 6 以降を使用する必要があります。 それ以外の場合、 ChooseFont 関数は、カスタム テンプレートでリンク コントロールを作成しようとしたときにエラーを返します。 このコントロールが有効になっているかどうかを確認するには、バージョン 6.0 に対して呼び出し元アプリケーションCOMCTL32.DLLコンパイルします。 詳細については、「 共通コントロールを使用してビジュアル スタイルを有効にする」を参照してください。

  3. アプリケーションでバージョン 5.0 以前COMCTL32.DLL使用している場合は、カスタム テンプレートを作成するときに次の操作を行う必要があります。

    • コントロールを PUSHBUTTON として指定します。 Fonts コントロール パネルの起動に使用されるコントロールは、リンクとしてではなくボタンとして表示されます。

    • font.dlg 内の次のテキストを置き換えます。

      CONTROL "<A>Show more fonts</A>", IDC_MANAGE_LINK, "SysLink", WS_TABSTOP, 7, 199, 227, 9

      次のテキストを使用します。

      PUSHBUTTON "S&how more fonts", IDC_MANAGE_LINK, 7, 199, 74, 14 , WS_TABSTOP

    • アプリケーションでカスタム テンプレートが使用されるようにするには、 CF_ENABLETEMPLATE フラグを使用してカスタム テンプレートを指定し、Windows 7 ChooseFont テンプレートに基づいてカスタム テンプレートを作成し、必要に応じてフック プロシージャを有効にする必要があります。

      カスタム テンプレートを作成せずにフック プロシージャを有効にすると、以前のバージョンの Windows の既定の ChooseFont テンプレートが読み込まれます。

注意

アプリケーションがコンパイルするCOMMCTL.DLLのバージョンに応じて、新しいテンプレートで CONTROL コントロールまたは PUSHBUTTON コントロールの種類を指定する必要があります。 また、アプリケーションが以前のバージョンの Windows オペレーティング システムで実行されている場合、WYSIWYG のフォント リストや拡張ファミリの表示など、Windows 7 固有の機能は使用できません。