|
TFontNameComboBox及TFontSizeComboBox的实现(1)
在用C++ Builder进行程序设计时,很多时候需要在运行状态下更改控件的字体名称或大小,虽然VCL类库中提供了TFontDialog对话框组件,但有时候并不是很方便。而C++ Builder本身又没有提供类似Word工具栏中的字体名称及大小的选择下拉列表,为方便使用,作者特编写两个字体组件 TFontNameComboBox和TFontSizeComboBox,下简单介绍一下实现的方法及原理。 要想取得系统所支持的字体及字体的大小,需要用到Windows SDK中的EnumFontFamiliesEx或EnumFontFamilies函数。这两个函数的函数原型如下: XML:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> 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。 下面是组件的简单实现代码: /*===========================================================================
|