Click here to Skip to main content
65,938 articles
CodeProject is changing. Read more.
Articles
(untagged)

XFont - Get font name and file information

0.00/5 (No votes)
21 May 2003 1  
XFont retrieves the name of the font file from the regsitry, and the font name from the font file

Introduction

XFont comprises two functions that are useful when trying to determine the name of the font file given the font name, and conversely when trying to find the font name from the font file. I have already introduced GetFontFile() in a previous article. This article presents a new non-MFC version of GetFontFile() and also GetFontProperties(), which together allow you to find the name of the font or the name of the font file.

First, let me acknowledge the work of Philip Patrick, who researched the font file format to come up with GetFontProperties(). I have taken his code and removed the MFC dependencies, added Unicode support, and converted the CFile file I/O to a memory-mapped file.

XFont Functions

  • GetFontFile() - Find the name of font file.
    ///////////////////////////////////////////////////////////////////////////////
    //
    // GetFontFile()
    //
    // Purpose:     Find the name of font file from the font name
    //
    // Parameters:  lpszFontName     - name of font
    //              lpszDisplayName  - pointer to buffer where font display name
    //                                 will be copied
    //              nDisplayNameSize - size of display name buffer in TCHARs
    //              lpszFontFile     - pointer to buffer where font file name
    //                                 will be copied
    //              nFontFileSize    - size of font file buffer in TCHARs
    //
    // Returns:     BOOL - TRUE = success
    //
    // Notes:       This is *not* a foolproof method for finding the name of a
    //              font file. If a font has been installed in a normal manner,
    //              and if it is in the Windows "Font" directory, then this method
    //              will probably work. It will probably work for most screen
    //              fonts and TrueType fonts. However, this method might not work
    //              for fonts that are created or installed dynamically, or that
    //              are specific to a particular device, or that are not installed
    //              into the font directory.
    // 
  • GetFontProperties() - Get font name from font file.
    ///////////////////////////////////////////////////////////////////////////////
    //
    // GetFontProperties()
    //
    // Purpose:     Get font name from font file
    //
    // Parameters:  lpszFilePath - file path of font file
    //              lpFontPropsX - pointer to font properties struct
    //
    // Returns:     BOOL - TRUE = success
    // 

How To Use

To integrate XFont into your app, you first need to add following files to your project:

  • XFont.cpp
  • XFont.h

If you include XFont in project that uses precompiled headers, you must change C/C++ Precompiled Headers settings to Not using precompiled headers for XFont.cpp.

Next, include the header file XFont.h in appropriate project files. Now you are ready to start using XFont. The two XFont functions are demonstrated fully in the XFont demo app.

Demo App

The XFontTest.exe demo tests the APIs in XFont. Here is some of the output:

XFont screenshot

Revision History

Version 1.1 - 2003 May 21

  • Removed MFC dependency from GetFontProperties
  • Converted CFile file I/O to memory mapped file
  • Added Unicode support
  • Combined with my GetFontFile routine

Version 1.0

  • Initial (separate) release of GetFontFile and GetFontProperties

Usage

This software is released into the public domain. You are free to use it in any way you like. If you modify it or extend it, please to consider posting new code here for everyone to share. This software is provided "as is" with no expressed or implied warranty. I accept no liability for any damage or loss of business that this software may cause.

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here