第38章 ChooseFont関数の使い方


今回は、少しためになる?解説をします。

さて、皆さんは左のようなダイアログボックスを見たことがありませんか。 フォントを選択するときなどによく出てきますね。 これを、ダイアログボックスとして自前で作ることはもちろん可能です。 しかし、かなり面倒です。このように、よく使うであろうダイアログボックスは あらかじめ、用意されています。こういうのを コモン・ダイアログボックスといいます。

では、こういうものを使いたいときはどうすればよいのでしょうか。 使い方は、比較的簡単です。CHOOSE何とか構造体とChoose何とか関数を 使います。今回はChooseFont関数を例にとって解説します。

BOOL ChooseFont( LPCHOOSEFONT lpcf // CHOOSEFONT構造体のアドレス );

この関数は、正常に終了すれば(OKボタンを押した)TRUEを、 エラーが発生したときなどはFALSEを返します。 最も簡単な例を示します。

LOGFONT lf; 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 = RGB(0, 0, 0); //ここに、選択した色が格納される cf.nFontType = SCREEN_FONTTYPE; ChooseFont(&cf);

まず、CHOOSEFONT構造体に必要な情報をセットします。このとき 全部のメンバーを設定するのは大変なので、いったん全部0で 埋めてしまいます。そして、必要なメンバーを設定します。 そして、ChooseFont関数を呼び出します。

ここで、cf.lpLogFontに注目してください。 この関数が実行されて、OKボタンが押されるとここに指定された ログフォント構造体に、ダイアログボックスで選択した フォントの諸設定が書き込まれます。

実際に、指定のフォントで文字を表示するときはこのログフォント 構造体を使います。

では、CHOOSEFONT構造体と、LOGFONT構造体の定義を見てみましょう。

ypedef struct { // cf DWORD lStructSize; HWND hwndOwner; HDC hDC; LPLOGFONT lpLogFont; INT iPointSize; DWORD Flags; DWORD rgbColors; LPARAM lCustData; LPCFHOOKPROC lpfnHook; LPCTSTR lpTemplateName; HINSTANCE hInstance; LPTSTR lpszStyle; WORD nFontType; WORD ___MISSING_ALIGNMENT__; INT nSizeMin; INT nSizeMax; } CHOOSEFONT;

lStructSizeには、構造体のサイズを設定します。

hWndOwnerには、このダイアログボックスの親を指定します。

hDCはプリンタを使わないときは設定しなくて大丈夫です。

lpLogFontは、先ほど説明したとおりです。

iPointSizeには、選択されたフォントのサイズを、10分の1ポイント単位で示します。

Flagsには、ダイアログボックスの初期化フラグを設定します。たとえば、CF_EFFECTSを 設定すると、打ち消し線・色・アンダーラインの選択をを表示します。その他いっぱい あるのでヘルプを参照してください。

rgbColorsには、最初の色(一番最初にダイアログボックスが現れたときに選択されている)を指定します。 ユーザーがその後違う色を選択して、OKボタンを押したときはその色が格納されます。

nSizeMin, nSizeMaxには、ユーザーが選択できる最小、最大のポイントサイズを 指定します。ただし、CF_LIMITSIZEフラグがセットされていないとだめです。

ここで、解説しなかったものにフック関数関係のものがあります。これについては、 また後の章で解説する予定です(忘れなければね)。

typedef struct tagLOGFONT { // lf LONG lfHeight; LONG lfWidth; LONG lfEscapement; LONG lfOrientation; LONG lfWeight; BYTE lfItalic; BYTE lfUnderline; BYTE lfStrikeOut; BYTE lfCharSet; BYTE lfOutPrecision; BYTE lfClipPrecision; BYTE lfQuality; BYTE lfPitchAndFamily; TCHAR lfFaceName[LF_FACESIZE]; } LOGFONT;

あれ、これどっかで見たことあるなー!

はい。第27章で出てきたCreateFont関数の引数に そっくりですね。このログフォント構造体に必要なものをセットして 使う場合、CreateFont関数ではなく、CreateFontIndirect関数を使います。

HFONT CreateFontIndirect( CONST LOGFONT *lplf // ログフォント構造体へのポインター );

この関数の後、SelectObject関数を呼び出すのは以前と同じです。 これで、何となくChooseFont関数の使い方と、このダイアログボックスで 設定されたフォントの使い方がわかったでしょうか。 次回は、具体的な例題を示します。


[SDK Index] [総合Index] [Previous Chapter] [Next Chapter]

Update May/27/1997 By Y.Kumei
当ホーム・ページの一部または全部を無断で複写、複製、 転載あるいはコンピュータ等のファイルに保存することを禁じます。