Click here to Skip to main content
13,861,988 members
Click here to Skip to main content
Add your own
alternative version


28 bookmarked
Posted 16 Aug 2003
Licenced CPOL

A font chooser dialog for the Pocket PC

, 16 Aug 2003
Rate this:
Please Sign up or sign in to vote.
Implementing a font chooser dialog with preview and ClearType support.

Sample Image - CeChooseFont.jpg


This article describes the implementation of a font chooser dialog for the Pocket PC, with the following features:

  • Font rendering preview
  • ClearType support
  • Property page implementation

The dialog layout was based on Pocket Excel's, and allows you to use the dialog with the SIP up.


The dialog was implemented as a property page so you can use it in your own property sheets without change. The demo project uses my own CCePropertySheet class to encapsulate it.

The class uses two public members for interfacing with the user:

  • m_logFont: a LOGFONT variable that receives and returns the font definition. You can use it immediately in CreateFontIndirect.
  • m_strPreview: a CString variable that receives the text you want to render on the preview. By default it is "AaBbCcXxYyZz".

Font enumeration

Font families are enumerated through a call to EnumFontFamilies. This function receives a callback function pointer that will fill up the font combo box. When the dialog is initialized, it tries to match the font specified in m_logFont with the contents of the combo boxes. If it cannot match the font name and size, the dialog will set both name and size in the proper combo boxes. The dialog is not prepared to receive a clean m_logFont, you must fill it in before using the dialog.


ClearType support depends on your system supporting it. Please check with your vendor if your device supports ClearType.

Creating a font with the ClearType property is as simple as specifying 5 as the lfQuality member of the LOGFONT structure.

Using the dialog

Using the dialog is very straightforward:

void CChildView::OnChooseFont() 
    CCePropertySheet    sheet(_T("Choose Font"));
    CChooseFontPage        page;

    // Create the default font
    page.m_logFont.lfHeight            = -11;
    page.m_logFont.lfWidth            = 0;
    page.m_logFont.lfEscapement        = 0;
    page.m_logFont.lfOrientation    = 0;
    page.m_logFont.lfWeight            = FW_NORMAL;
    page.m_logFont.lfItalic            = FALSE;
    page.m_logFont.lfUnderline        = FALSE;
    page.m_logFont.lfStrikeOut        = 0;
    page.m_logFont.lfCharSet        = ANSI_CHARSET;
    page.m_logFont.lfOutPrecision    = OUT_DEFAULT_PRECIS;
    page.m_logFont.lfClipPrecision    = CLIP_DEFAULT_PRECIS;
    page.m_logFont.lfQuality        = DEFAULT_QUALITY;
    page.m_logFont.lfPitchAndFamily = DEFAULT_PITCH | FF_SWISS;
    _tcscpy(page.m_logFont.lfFaceName, TEXT("Tahoma"));



On exit, the m_logFont variable will have the new font definition, ready to be used.

Adding new fonts

Adding new fonts to your device is simple: just copy the desktop TrueType font files you wish to the device's \Windows\Fonts folder. They will be readily available.


This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


About the Author

João Paulo Figueira
Software Developer (Senior) Frotcom International
Portugal Portugal
I work on R&D for Frotcom International, a company that develops web-based fleet management solutions.

You may also be interested in...

Comments and Discussions

QuestionAdding fonts programmatically? Pin
Nimai4-Mar-05 8:23
memberNimai4-Mar-05 8:23 
AnswerRe: Adding fonts programmatically? Pin
João Paulo Figueira5-Mar-05 4:46
professionalJoão Paulo Figueira5-Mar-05 4:46 
GeneralRe: Adding fonts programmatically? Pin
sithira5-Jun-05 21:14
membersithira5-Jun-05 21:14 
GeneralRe: Adding fonts programmatically? Pin
João Paulo Figueira5-Jun-05 22:51
professionalJoão Paulo Figueira5-Jun-05 22:51 
GeneralRe: Adding fonts programmatically? Pin
sithira13-Jun-05 20:30
membersithira13-Jun-05 20:30 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

Permalink | Advertise | Privacy | Cookies | Terms of Use | Mobile
Web04 | 2.8.190214.1 | Last Updated 17 Aug 2003
Article Copyright 2003 by João Paulo Figueira
Everything else Copyright © CodeProject, 1999-2019
Layout: fixed | fluid