Creating a Logical Font

You can use the Font common dialog box to display available fonts. The ChooseFont dialog box is displayed after an application initializes the members of a CHOOSEFONT structure and calls the ChooseFont function. After the user chooses one of the available fonts and presses the OK button, the ChooseFont function initializes a LOGFONT structure with the relevant data. Your application can then call the CreateFontIndirect function and create a logical font based on the user's request. The following example demonstrates how this is done.

HFONT FAR PASCAL MyCreateFont( void )

{

CHOOSEFONT cf;

LOGFONT lf;

HFONT hfont;

/* Initialize members of the CHOOSEFONT structure. */

cf.lStructSize = sizeof(CHOOSEFONT);

cf.hwndOwner = (HWND)NULL;

cf.hDC = (HDC)NULL;

cf.lpLogFont = &lf;

cf.iPointSize = 0;

cf.Flags = CF_SCREENFONTS;

cf.rgbColors = RGB(0,0,0);

cf.lCustData = 0L;

cf.lpfnHook = (LPCFHOOKPROC)NULL;

cf.lpTemplateName = (LPSTR)NULL;

cf.hInstance = (HINSTANCE) NULL;

cf.lpszStyle = (LPSTR)NULL;

cf.nFontType = SCREEN_FONTTYPE;

cf.nSizeMin = 0;

cf.nSizeMax = 0;

/* Display the CHOOSEFONT common-dialog box. */

ChooseFont(&cf);

/* Create a logical font based on the user's */

/* selection and return a handle identifying */

/* that font. */

hfont = CreateFontIndirect(cf.lpLogFont);

return (hfont);

}