📄 sysfont16.c
字号:
/******************************************************
Copyright(c) 版权所有,1998-2003微逻辑。保留所有权利。
******************************************************/
/*****************************************************
文件说明:系统字体字模驱动程序
版本号:1.0.0
开发时期:2000
作者:李林
修改记录:
******************************************************/
#include <eframe.h>
#include <gwmeobj.h>
#include <eobjtype.h>
#include "hzk16.h"
static DWORD SYSFont16_Init(void);
static BOOL SYSFont16_Deinit( DWORD dwData );
static BOOL SYSFont16_InstallFont( DWORD dwData, LPCTSTR lpszPathName );
static HANDLE SYSFont16_CreateFont( DWORD dwData, const LOGFONT *lplf );
static BOOL SYSFont16_DeleteFont( HANDLE );
static int SYSFont16_MaxHeight( HANDLE );
static int SYSFont16_MaxWidth( HANDLE );
static int SYSFont16_WordLength( HANDLE, const BYTE FAR* lpText );
static int SYSFont16_WordHeight( HANDLE, WORD aWord );
static int SYSFont16_WordWidth( HANDLE, WORD aWord );
static int SYSFont16_WordMask( HANDLE, const BYTE FAR* lpText, _LPBITMAPDATA );
static int SYSFont16_TextWidth( HANDLE, const BYTE FAR* lpText, int aLimiteWidth );
static int SYSFont16_TextHeight( HANDLE, const BYTE FAR* lpText, int aLineWidth );
static const BYTE FAR* SYSFont16_NextWord( HANDLE, const BYTE FAR* lpText );
static LPCBYTE _GetChineseMask( WORD );
// 驱动程序接口函数
const _FONTDRV FAR _SYSFont16Drv = {
SYSFont16_Init,
SYSFont16_Deinit,
SYSFont16_InstallFont,
SYSFont16_CreateFont,
SYSFont16_DeleteFont,
SYSFont16_MaxHeight,
SYSFont16_MaxWidth,
SYSFont16_WordLength,
SYSFont16_WordHeight,
SYSFont16_WordWidth,
SYSFont16_WordMask,
SYSFont16_TextWidth,
SYSFont16_TextHeight,
SYSFont16_NextWord
};
enum{
USE_NOFONT = 0,
USE_ROMFONT = 1,
USE_FILEFONT = 2
};
#define MK_FARP( seg, ofs ) ( (void * )MAKELONG( ofs, seg ) )
#define IS_CHINESE( lpText ) ( (*(lpText) & 0x80) && ( *((lpText) + 1) & 0x80 ) )
#define IS_TEXT_MARK( v ) ( (v) == TEXT_SOFT_BREAK || (v) == TEXT_KEY_BREAK || (v) == TEXT_EOF )
#define _GET_CHINESE( lpText ) ( (WORD)( (((WORD)*(lpText)) << 8) | *((lpText) + 1) ) )
#define _GET_ENGLISH( lpText ) ( *(lpText) )
#define FONT_HEIGHT 16
#define CHINESE_WIDTH 16
#define ENGLISH_WIDTH 8
// *****************************************************************
// 声明:static DWORD SYSFont16_Init( void )
// 参数:
// 无
// 返回值:
// 假如成功,返回对象句柄;否则,返回NULL
// 功能描述:
// 初始化字体驱动程序
// 引用:
// 驱动程序接口函数
// *****************************************************************
static DWORD SYSFont16_Init( void )
{
return 1;
}
// *****************************************************************
// 声明:static BOOL SYSFont16_Deinit( DWORD dwData )
// 参数:
// IN dwData - 由SYSFont16_Init返回的对象句柄
// 返回值:
// 假如成功,返回TRUE;否则,返回FALSE
// 功能描述:
// 释放对象
// 引用:
// 驱动程序接口函数
// *****************************************************************
static BOOL SYSFont16_Deinit( DWORD dwData )
{
return 1;
}
// *****************************************************************
// 声明:BOOL SYSFont16_InstallFont( DWORD dwData, LPCTSTR lpszPathName )
// 参数:
// IN dwData - 由ROM8x8_Init返回的对象句柄
// IN lpszPathName - 文件路径名(字体文件)
// 返回值:
// 假如字体文件被该驱动程序识别,返回TRUE; 否则,返回FALSE
// 功能描述:
// 安装一个字体
// 引用:
// 驱动程序接口函数
// *****************************************************************
BOOL SYSFont16_InstallFont( DWORD dwData, LPCTSTR lpszPathName )
{
return FALSE;
}
// *****************************************************************
// 声明:HANDLE SYSFont16_CreateFont( DWORD dwData, const LOGFONT *lplf )
// 参数:
// IN dwData - 由SYSFont16_Init返回的对象句柄
// IN lplf - LOGFONT 结构指针,包含逻辑字体属性
// 返回值:
// 假如成功,返回打开的逻辑字体对象句柄
// 功能描述:
// 创建逻辑字体对象
// 引用:
// 驱动程序接口函数
// *****************************************************************
HANDLE SYSFont16_CreateFont( DWORD dwData, const LOGFONT *lplf )
{
return (HANDLE)1;
}
// *****************************************************************
// 声明:BOOL SYSFont16_DeleteFont( HANDLE handle )
// 参数:
// IN handle - 由 SYSFont16_CreateFont 返回的逻辑字体对象句柄
// 返回值:
// 假如成功,返回TRUE; 否则,返回FALSE
// 功能描述:
// 删除逻辑字体对象
// 引用:
// 驱动程序接口函数
// *****************************************************************
BOOL SYSFont16_DeleteFont( HANDLE handle )
{
return TRUE;
}
// *****************************************************************
// 声明:static int SYSFont16_MaxHeight( HANDLE handle )
// 参数:
// IN handle - 由 SYSFont16_CreateFont 返回的逻辑字体对象句柄
// 返回值:
// 返回逻辑字体的高度
// 功能描述:
// 得到逻辑字体的高度
// 引用:
// 驱动程序接口函数
// *****************************************************************
static int SYSFont16_MaxHeight( HANDLE handle )
{
return FONT_HEIGHT;
}
// *****************************************************************
// 声明:static int SYSFont16_MaxWidth( HANDLE handle )
// 参数:
// IN handle - 由 SYSFont16_CreateFont 返回的逻辑字体对象句柄
// 返回值:
// 返回逻辑字体的宽度
// 功能描述:
// 得到逻辑字体的宽度
// 引用:
// 驱动程序接口函数
// *****************************************************************
static int SYSFont16_MaxWidth( HANDLE handle )
{
return 8;
}
// *****************************************************************
// 声明:static int SYSFont16_WordHeight( HANDLE handle, WORD aWord )
// 参数:
// IN handle - 由 SYSFont16_CreateFont 返回的逻辑字体对象句柄
// IN aWord - 字符代码
// 返回值:
// 返回字符的高度
// 功能描述:
// 得到字符的高度
// 引用:
// 驱动程序接口函数
// *****************************************************************
static int SYSFont16_WordHeight( HANDLE handle, WORD aWord )
{
return FONT_HEIGHT;
}
// *****************************************************************
// 声明:static int SYSFont16_WordWidth( HANDLE handle, WORD aWord )
// 参数:
// IN handle - 由 SYSFont16_CreateFont 返回的逻辑字体对象句柄
// IN aWord - 字符代码
// 返回值:
// 返回字符的宽度
// 功能描述:
// 得到字符的宽度
// 引用:
// 驱动程序接口函数
// *****************************************************************
static int SYSFont16_WordWidth( HANDLE handle, WORD aWord )
{
return aWord < 0xff ? ENGLISH_WIDTH : CHINESE_WIDTH;
}
// *****************************************************************
// 声明:static int SYSFont16_WordMask( HANDLE handle, const BYTE FAR* lpText, _LPBITMAPDATA lpMask )
// 参数:
// IN handle - 由 SYSFont16_CreateFont 返回的逻辑字体对象句柄
// IN lpText - 文本指针
// OUT lpMask - 用于接受字模的结构指针
// 返回值:
// 返回字符代码的字节数(宽字符为2),lpMask包含该字符的长宽和字模地址
// 功能描述:
// 得到字符代码的字节数(宽字符为2)和字符的长宽和字模地址
// 引用:
// 驱动程序接口函数
// *****************************************************************
static int SYSFont16_WordMask( HANDLE handle, LPCBYTE lpText, _LPBITMAPDATA lpMask )
{
#ifdef EML_DOS
static const WORD FAR chineseMask[16] =
{ 0xfffe,
0x8002,
0x8002,
0x8002,
0x8002,
0x8002,
0x8002,
0x8002,
0x8002,
0x8002,
0x8002,
0x8002,
0x8002,
0x8002,
0xfffe,
0x0000 };
static const BYTE FAR englishMask[16] =
{ 0xfe,
0x82,
0x82,
0x82,
0x82,
0x82,
0x82,
0x82,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -