打印本文 打印本文 关闭窗口 关闭窗口
TFontNameComboBox及TFontSizeComboBox的实现
作者:武汉SEO闵涛  文章来源:敏韬网  点击数4809  更新时间:2009/4/23 18:38:22  文章录入:mintao  责任编辑:mintao

在用C++ Builder进行程序设计时,很多时候需要在运行状态下更改控件的字体名称或大小,虽然VCL类库中提供了TFontDialog对话框组件,但有时候并不是很方便。而C++ Builder本身又没有提供类似Word工具栏中的字体名称及大小的选择下拉列表,为方便使用,作者特编写两个字体组件 TFontNameComboBox和TFontSizeComboBox,下简单介绍一下实现的方法及原理。

  要想取得系统所支持的字体及字体的大小,需要用到Windows SDK中的EnumFontFamiliesEx或EnumFontFamilies函数。这两个函数的函数原型如下:

 

int EnumFontFamiliesEx(

    HDC hdc, // handle to device context

    LPLOGFONT lpLogfont,// pointer to logical font information

    FONTENUMPROC lpEnumFontFamExProc, // pointer to callback function

    LPARAM lParam, // application-supplied data

    DWORD dwFlags // reserved; must be zero

    );

 

int EnumFontFamilies(

    HDC hdc, // handle to device control

    LPCTSTR lpszFamily, // pointer to family-name string

    FONTENUMPROC lpEnumFontFamProc,// pointer to callback function

    LPARAM lParam// address of application-supplied data 

   ); 

 

这两个函数的功能基本相同,但相对而言EnumFontFamiliesEx函数提供了更多的字体信息。在这两个函数中,都用到一个类型为FONTENUMPROC的回调函数,该函数的原型如下:

int CALLBACK EnumFontFamProc(

    ENUMLOGFONT FAR *lpelf, // pointer to logical-font data

    NEWTEXTMETRIC FAR *lpntm, // pointer to physical-font data

    int FontType, // type of font

    LPARAM lParam // address of application-defined data 

   );

这两个函数更详细的说明请参考MSDN。

下面是组件的简单实现代码:

/*===========================================================================
  TFontNameComboBox
TFontNameSizeComboBox组件头文件
  文件名称:FontComboBox.H
  
程序设计:梁生红
  创建日期:2003-03-20
===========================================================================*/
#ifndef FontComboBoxH
#define FontComboBoxH
//---------------------------------------------------------------------------
#include <SysUtils.hpp>
#include <Controls.hpp>
#include <Classes.hpp>
#include <Forms.hpp>
#include <StdCtrls.hpp>
#include <printers.hpp>
#include <Math.h>
//---------------------------------------------------------------------------
int static PixelsPerInch;

//
下列两个回调函数一定不能为类成员函数
bool __stdcall EnumFontNameProc(ENUMLOGFONT FAR *lpelf,NEWTEXTMETRICEX FAR *lpntme,
                                int FontType, LPARAM lParam);

bool __stdcall EnumFontSizeProc(ENUMLOGFONT FAR *lpelf,NEWTEXTMETRIC FAR *lpntm,
                                int FontType, LPARAM lParam);

//---------------------------------------------------------------------------
/* TODO : TFontNameComboBox
的声明 */
class PACKAGE TFontNameComboBox : public TCustomComboBox
{
private:
protected:
        void

[1] [2] [3] [4] [5] [6]  下一页

打印本文 打印本文 关闭窗口 关闭窗口