|
这几天在瞎搞xbf字体功能很强大,可是官方给的例程太过简陋,也没有人发自己的例子给大家所以捣鼓了很久
这边是我的实现代码是在stm32f407上运行的,文件系统是fatfs
#include "GUI.h"
#include "ff.h"
#include "GUI_Private.h"
GUI_FONT XBFFont;
GUI_XBF_DATA XBF_Data;
FIL fontfsrc;//注意,必须为全局变量
static int _cbGetData(U32 Off, U16 NumBytes, void * pVoid, void * pBuffer) {
FIL fsrc; //
FRESULT res; //
UINT br;
char string[30];
int flag=0;
fsrc = *(FIL *)pVoid;
/* Set file pointer to the requested position */
res = f_lseek(&fsrc,Off); //
if (res != FR_OK) {
res = f_open(&fontfsrc, "0:/sys/Font18std.xbf", FA_OPEN_EXISTING | FA_READ);//写上字体文件存放的位置
fsrc =fontfsrc;
res = f_lseek(&fsrc,Off); //
if (res != FR_OK) {
return 1; /* Error */
}
}
res=f_read(&fsrc,pBuffer,NumBytes,&br);
if (res != FR_OK) {
return 1; /* Error */
}
if (br != NumBytes) {
return 1; /* Error */
}
return 0; /* Ok */
}
void readFontfromXBFSD(void){
FRESULT res; // 定义操作结果变量
GUI_FONTINFO fontinfo;
GUI_CHARINFO_EXT charinfo;
int i;
int string2;
res = f_open(&fontfsrc, "0:/sys/Font18std.xbf", FA_OPEN_EXISTING | FA_READ);//写上字体文件存放的位置
GUI_XBF_CreateFont(&XBFFont, /* Pointer to GUI_FONT structure in RAM */
&XBF_Data, /* Pointer to GUI_XBF_DATA structure in RAM */
GUI_XBF_TYPE_PROP, /* Font type to be created *///字体的格式,我用的stand就是这个,其他还有ext和aa_ext,对应的是fontcvt里的extended和extended,antialiased
_cbGetData, /* Pointer to callback function */
&fontfsrc); /* Pointer to be passed to GetData function */
}
设定XBFFont就可以作为自己自定义的字体啦,只要不关闭字体文件就可以正常的使用了,当然在用之前不要忘了使用GUI_UC_SetEncodeUTF8();设置字体编码,输入的文字也用UTF8编码的,gb2312可认不出来呀
更新:在getdata里加入了打开字体文件,这样当你别的地方需要用到文件系统的时候也不会出错了(要放在判断里面哦而且不要关闭,不然就会每次查找都打开一次卡的飞起) |
|