完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
20.2 移植到开发板上显示
移植到开发上的程序主要分为两部分,一个是从SD卡中读取字体的驱动,另一个建立一个对话框显示字体。 20.2.1 创建XBF字体 复制代码 GUI_XBF_DATA XBF_Data; GUI_FONT XBF_Font; FIL Fontfile; /* ********************************************************************************************************* * * _cbGetData * * Function description * Callback function for getting font data * * Parameters: * Off - Position of XBF file to be read * NumBytes - Number of requested bytes * pVoid - Application defined pointer * pBuffer - Pointer to buffer to be filled by the function * * Return value: * 0 on success, 1 on error ********************************************************************************************************* */ static int _cbGetData(U32 Off, U16 NumBytes, void * pVoid, void * pBuffer) (1) { FIL *FontFile; /* The pVoid pointer may be used to get a file handle */ FontFile = (FIL *)pVoid; /* * Set file pointer to the required position */ result =f_lseek(FontFile, Off); if (result != FR_OK) { return 1; /* Error */ } /* * Read data into buffer */ result = f_read(FontFile, pBuffer, NumBytes, &bw); if (result != FR_OK) { return 1; /* Error */ } return 0; } /* ********************************************************************************************************* * 函 数 名: _ShowXBF * 功能说明: 使用XBF字体 * 形 参:无 * 返 回 值: 无 ********************************************************************************************************* */ static void _ShowXBF(void) { result = f_open(&Fontfile, "YaHe.xbf", FA_OPEN_EXISTING | FA_READ | FA_OPEN_ALWAYS);(2) if (result != FR_OK) { return; } // // Create XBF font // GUI_XBF_CreateFont(&XBF_Font, // Pointer to GUI_FONT structure in RAM(3) &XBF_Data, // Pointer to GUI_XBF_DATA structure in RAM GUI_XBF_TYPE_PROP_AA4_EXT, // Font type to be created _cbGetData, // Pointer to callback function &Fontfile); // Pointer to be passed to GetData function } |
|
|
|
|
|
1. 从SD卡中读取字体文件的方法。
2. 由于没有开启FatFS的长文件名,文件的名字要符合8.3格式。 3. 创建XBF_Font字体。默认情况下,每个字符的数据字节最大值限制为200。这应该满足大部分要求。如果加载使用更多字节的字符,在调试版本中将生成警告。通过向文件GUIConf.h添加以下定义可增加默认值: #define GUI_MAX_XBF_BYTES 500 // Sets the maximum number of bytes/chars to 500 默认的定义在文件GUI_ConfDefaults.h文件里面: #ifndef GUI_MAX_XBF_BYTES #define GUI_MAX_XBF_BYTES 200 #endif |
|
|
|
|
|
20.2.2 主函数
复制代码 /* ********************************************************************************************************* * 对话框信息 ********************************************************************************************************* */ static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] = { { FRAMEWIN_CreateIndirect, "armfly", 0, 0, 0, 800,480,FRAMEWIN_CF_MOVEABLE,0}, { BUTTON_CreateIndirect, "安富莱电子", GUI_ID_BUTTON0, 390,40,360,100,0,0}, { TEXT_CreateIndirect, "安富莱电子", GUI_ID_TEXT0, 5, 10, 300, 70, 0,0}, { TEXT_CreateIndirect, "安富莱电子", GUI_ID_TEXT1, 5, 80,300, 70, 0,0}, { TEXT_CreateIndirect, "安富莱电子", GUI_ID_TEXT2, 5, 160,300, 70, 0,0} }; /* ********************************************************************************************************* * 函 数 名: PaintDialog * 功能说明: 重绘函数 * 形 参:pMsg 消息指针 * 返 回 值: 无 ********************************************************************************************************* */ void PaintDialog(WM_MESSAGE * pMsg) { WM_HWIN hWin = pMsg->hWin; } /* ********************************************************************************************************* * 函 数 名: InitDialog * 功能说明: 对话框初始化 * 形 参:pMsg 消息指针 * 返 回 值: 无 ********************************************************************************************************* */ void InitDialog(WM_MESSAGE * pMsg) { WM_HWIN hWin = pMsg->hWin; // //FRAMEWIN // FRAMEWIN_SetFont(hWin,&GUI_Font32B_ASCII); FRAMEWIN_SetTextAlign(hWin,GUI_TA_VCENTER|GUI_TA_CENTER); FRAMEWIN_AddCloseButton(hWin, FRAMEWIN_BUTTON_RIGHT, 0); FRAMEWIN_AddMaxButton(hWin, FRAMEWIN_BUTTON_RIGHT, 1); FRAMEWIN_AddMinButton(hWin, FRAMEWIN_BUTTON_RIGHT, 2); FRAMEWIN_SetTitleHeight(hWin,35); // //GUI_ID_BUTTON0 // _ShowXBF();(1) GUI_UC_SetEncodeUTF8();(2) BUTTON_SetFont(WM_GetDialogItem(hWin,GUI_ID_BUTTON0),&XBF_Font);(3) // //GUI_ID_TEXT0 // TEXT_SetTextColor(WM_GetDialogItem(hWin,GUI_ID_TEXT0), GUI_RED); TEXT_SetFont(WM_GetDialogItem(hWin,GUI_ID_TEXT0),&XBF_Font); TEXT_SetTextColor(WM_GetDialogItem(hWin,GUI_ID_TEXT1), GUI_GREEN); TEXT_SetFont(WM_GetDialogItem(hWin,GUI_ID_TEXT1),&XBF_Font); TEXT_SetTextColor(WM_GetDialogItem(hWin,GUI_ID_TEXT2), GUI_BLUE); TEXT_SetFont(WM_GetDialogItem(hWin,GUI_ID_TEXT2),&XBF_Font); // GUI_UC_SetEncodeNone(); } /* ********************************************************************************************************* * 函 数 名: _cbCallback * 功能说明: 对话框回调函数 * 形 参:无 * 返 回 值: 无 ********************************************************************************************************* */ static void _cbCallback(WM_MESSAGE * pMsg) { int NCode, Id; WM_HWIN hWin = pMsg->hWin; switch (pMsg->MsgId) { case WM_PAINT: PaintDialog(pMsg); break; case WM_INIT_DIALOG: InitDialog(pMsg); break; case WM_KEY: switch (((WM_KEY_INFO*)(pMsg->Data.p))->Key) { case GUI_KEY_ESCAPE: GUI_EndDialog(hWin, 1); break; case GUI_KEY_ENTER: GUI_EndDialog(hWin, 0); break; } break; case WM_NOTIFY_PARENT: Id = WM_GetId(pMsg->hWinSrc); NCode = pMsg->Data.v; switch (Id) { case GUI_ID_OK: if(NCode==WM_NOTIFICATION_RELEASED) GUI_EndDialog(hWin, 0); break; case GUI_ID_CANCEL: if(NCode==WM_NOTIFICATION_RELEASED) GUI_EndDialog(hWin, 0); break; } break; default: WM_DefaultProc(pMsg); } } /* ********************************************************************************************************* * 函 数 名: MainTask * 功能说明: GUI主函数 * 形 参:无 * 返 回 值: 无 ********************************************************************************************************* */ void MainTask(void) { GUI_Init(); WM_SetDesktopColor(GUI_WHITE); /* Automacally update desktop window */ WM_SetCreateFlags(WM_CF_MEMDEV); /* Use memory devices on all windows to avoid flicker */ PROGBAR_SetDefaultSkin(PROGBAR_SKIN_FLEX); FRAMEWIN_SetDefaultSkin(FRAMEWIN_SKIN_FLEX); PROGBAR_SetDefaultSkin(PROGBAR_SKIN_FLEX); BUTTON_SetDefaultSkin(BUTTON_SKIN_FLEX); CHECKBOX_SetDefaultSkin(CHECKBOX_SKIN_FLEX); DROPDOWN_SetDefaultSkin(DROPDOWN_SKIN_FLEX); SCROLLBAR_SetDefaultSkin(SCROLLBAR_SKIN_FLEX); SLIDER_SetDefaultSkin(SLIDER_SKIN_FLEX); HEADER_SetDefaultSkin(HEADER_SKIN_FLEX); RADIO_SetDefaultSkin(RADIO_SKIN_FLEX); GUI_CreateDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), &_cbCallback, 0, 0, 0); while(1) { GUI_Delay(10); } } |
|
|
|
|
|
1. 创建XBF字体。
2. 使能UTF-8解码 3. 在按钮中显示的字体使用XBF字体。 4. 还有最重要的一条,上面的这些函数都是在MainTask.c文件里面的,这个文件的编码格式必须得是UTF-8,设置方法在前面18.1.6小节有说明。 实际显示效果如下: 特别注意,如果使用的是800*480分辨率的屏可以完成显示出来,如果是小于这个分辨率的屏只能显示出一部分,大家可以按照上面的设计方法做一个适合自己屏大小的显示或者直接拖动这个对话框即可。 |
|
|
|
|
|
20.3 总结
推荐大家在以后的工程中采用这种方式,这种显示方式有个问题就是显示速度有点慢。比如本期教程显示微软雅黑36号字体,4位抗锯齿。显示就有缓慢,显示小字体不带抗锯齿还是没问题的。 |
|
|
|
|
|
464 浏览 0 评论
478 浏览 1 评论
基于瑞萨FPB-RA4E2智能床头灯项目——1编译环境搭建与点亮驱动ws2812全彩LED
439 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-LCD显示图片编程示例之介绍mmap
994 浏览 0 评论
《DNESP32S3使用指南-IDF版_V1.6》第二章 常用的C语言知识点
1056 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11792 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-25 20:27 , Processed in 0.710558 second(s), Total 80, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号