では、こういうものを使いたいときはどうすればよいのでしょうか。 使い方は、比較的簡単です。CHOOSE何とか構造体とChoose何とか関数を 使います。今回はChooseFont関数を例にとって解説します。
この関数は、正常に終了すれば(OKボタンを押した)TRUEを、 エラーが発生したときなどはFALSEを返します。 最も簡単な例を示します。BOOL ChooseFont( LPCHOOSEFONT lpcf // CHOOSEFONT構造体のアドレス );
まず、CHOOSEFONT構造体に必要な情報をセットします。このとき 全部のメンバーを設定するのは大変なので、いったん全部0で 埋めてしまいます。そして、必要なメンバーを設定します。 そして、ChooseFont関数を呼び出します。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);
ここで、cf.lpLogFontに注目してください。 この関数が実行されて、OKボタンが押されるとここに指定された ログフォント構造体に、ダイアログボックスで選択した フォントの諸設定が書き込まれます。
実際に、指定のフォントで文字を表示するときはこのログフォント 構造体を使います。
では、CHOOSEFONT構造体と、LOGFONT構造体の定義を見てみましょう。
lStructSizeには、構造体のサイズを設定します。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;
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;
この関数の後、SelectObject関数を呼び出すのは以前と同じです。 これで、何となくChooseFont関数の使い方と、このダイアログボックスで 設定されたフォントの使い方がわかったでしょうか。 次回は、具体的な例題を示します。HFONT CreateFontIndirect( CONST LOGFONT *lplf // ログフォント構造体へのポインター );
[SDK Index] [総合Index] [Previous Chapter] [Next Chapter]
Update May/27/1997 By Y.Kumei