|
本帖最后由 hpdell 于 2024-1-13 13:12 编辑
emWin 搞的 xbf 字体存入到外部 spi flash 里面, 显示失败 ?
使用 FontCvtST_v5.44.exe 转换 的 xbf 字体
GUI_XBF_DATA XBF_Data16;
GUI_FONT XBF_Font16;
void *FontFile16;
/* 创建16点阵字体 */
GUI_XBF_CreateFont(&XBF_Font16, /* GUI_FONT类型变量 */
&XBF_Data16, /* GUI_XBF_DATA类型变量 */
GUI_XBF_TYPE_PROP , /* 字体类型 GUI_XBF_TYPE_PROP_EXT GUI_XBF_TYPE_PROP GUI_XBF_TYPE_PROP_AA2_EXT */
_cbGetData16, /* 回调函数 */
&FontFile16); /* 回调函数参数 */
static int _cbGetData16(U32 Off, U16 NumBytes, void * pVoid, void * pBuffer)
{
// 直接从 外部 spi flash 里面读取字库数据
uint32_t _uiReadAddr = (QSPI_APP_WIZARD_FONTS_HWZS_23PIX_SECTOR_ADDR*4096UL);
_uiReadAddr += Off;
/* 读取点阵数据 */
sf_ReadBuffer(pBuffer, _uiReadAddr , NumBytes);
__log("\r\n_cbGetData16 SPI Flash NumBytes:%d Off:%d\r\n", NumBytes, Off); // NumBytes:18 Off:0 貌似不管显示中文什么字符, 传过来的 参数始终都是 NumBytes:18 Off:0 ? 有些不正常啊 ??
return 0;
}
int main()
{
/* 初始化 */
GUI_Init();
/*
关于多缓冲和窗口内存设备的设置说明
1. 使能多缓冲是调用的如下函数,用户要在LCDConf_Lin_Template.c文件中配置了多缓冲,调用此函数才有效:
WM_MULTIBUF_Enable(1);
2. 窗口使能使用内存设备是调用函数:WM_SetCreateFlags(WM_CF_MEMDEV);
3. 如果emWin的配置多缓冲和窗口内存设备都支持,二选一即可,且务必优先选择使用多缓冲,实际使用
STM32H7 + 32位SDRAM + RGB565/RGB888平台测试,多缓冲可以有效的降低窗口移动或者滑动时的撕裂
感,并有效的提高流畅性,通过使能窗口使用内存设备是做不到的。
4. 所有emWin例子默认是开启三缓冲。
*/
WM_MULTIBUF_Enable(1);
/* 启用UTF-8编码 */
GUI_UC_SetEncodeUTF8();
Create_XBF_Font() ;
....
}
void InitDialog(WM_MESSAGE * pMsg)
{
WM_HWIN hWin = pMsg->hWin;
WM_HWIN hItem;
//
//FRAMEWIN
//
FRAMEWIN_SetFont(hWin,&GUI_Font32B_ASCII);
FRAMEWIN_AddCloseButton(hWin, FRAMEWIN_BUTTON_RIGHT, 0);
FRAMEWIN_AddMaxButton(hWin, FRAMEWIN_BUTTON_RIGHT, 1);
FRAMEWIN_AddMinButton(hWin, FRAMEWIN_BUTTON_RIGHT, 2);
FRAMEWIN_SetTitleHeight(hWin,32);
hItem = WM_GetDialogItem(pMsg->hWin, GUI_ID_BUTTON0);
BUTTON_SetFont(hItem, &GUI_Font24B_1);
/* 初始化TEXT0 */
hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_0);
TEXT_SetText(hItem, "emWin");
TEXT_SetFont(hItem, &GUI_Font32B_ASCII);
/* 初始化TEXT1 */
hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_1);
{
// char __utf8_buf [128] = {0};
//
// gb2utf8( &__utf8_buf[0], (const char *)"使用H743开发板");
//
TEXT_SetFont(hItem, &XBF_Font16);
TEXT_SetText(hItem, "使"); // 这个地方 使用 XBF 字体 显示不出来 中文 ??
}
}
貌似上述步骤看着也没有什么问题呀, 可就是使用 xbf 显示不出来
??
|
|