STM32 野火MINI 用FontCvtST.exe 生成.c文件 写汉字到文本框 按钮上
参考了好多大神博客,自己写的过程中发现,还有些小细节。
一、打开Notepad写需要的字
另存为 UTF-16LE 也就是Unicode。
二、打开FontCvtST转
删掉所有字
读入test.txt里的字
选择刚才的test.txt
另存为.c文件
改个英文名
复制到RTOS的例程文件夹下
三、打开GUIBuilder 画一个这样的
保存之前要注意路径配置要在当前位置,否则存不上
生成的DLG.c放到工程里
add进来
最下方要补一个函数,引用
/* 开发板硬件bsp头文件 */
#include "./led/bsp_led.h"
#include "./usart/bsp_usart.h"
#include "./key/bsp_key.h"
#include "./lcd/bsp_ili9341_lcd.h"
#include "./lcd/bsp_xpt2046_lcd.h"
#include "./flash/bsp_spi_flash.h"
#include "./sram/bsp_fsmc_sram.h"
#include "./TPad/bsp_tpad.h"
#include "./beep/bsp_beep.h"
#include <string.h>
。。。
/**
* @
* brief GUI主任务
* @note 无
* @param 无
* @retval 无
*/
void MainTask(void)
{
/* 设置桌面窗口颜色 */
//WM_SetDesktopColor(GUI_BLUE);
/* 创建对话框 */
Create();
/* 开启光标 */
//GUI_CURSOR_Show();
while (1)
{
GUI_Delay(500);
}
}
因为在main.c里头有个任务是这样
static void GUI_Task(void* parameter)
{
/* 初始化STemWin */
GUI_Init();
while(1)
{
MainTask();
}
}
四、在工程里添加kai16.c
这个字体只用在DLG.c中,把kai16.c里头的宏复制到DLG.c里头
要载#include “DIALOG.h”后面,否则GUI_CONST_STORAGE找不到
五、来到DLG.c中 _aDialogCreate函数
static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] = {
{ FRAMEWIN_CreateIndirect, "", ID_FRAMEWIN_0, 0, 0, 240, 320, 0, 0x0, 0 },
{ BUTTON_CreateIndirect, "明月", ID_BUTTON_0, 39, 50, 80, 20, 0, 0x0, 0 },
{ PROGBAR_CreateIndirect, "Progbar", ID_PROGBAR_0, 32, 29, 159, 20, 0, 0x0, 0 },
{ TEXT_CreateIndirect, "", ID_TEXT_0, 1, 60, 240, 50, 0, 0x64, 0 },
// USER START (Optionally insert additional widgets)
// USER END
};
这里头高度要根据你字体大写设定,别挡住,比如这里高度就是50。
找到WM_INIT_DIALOG这个消息,在这里写字体设置,包括文本框,按钮的
static void _cbDialog(WM_MESSAGE * pMsg) {
WM_HWIN hItem;
int NCode;
int Id;
// USER START (Optionally insert additional variables)
// USER END
BUTTON_Handle btnhandle;
switch (pMsg->MsgId) {
case WM_INIT_DIALOG:
// 文本
GUI_UC_SetEncodeUTF8();
hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_0);
TEXT_SetFont(hItem, &GUI_Fontkai16);//song16是生成的C文件名
TEXT_SetTextColor(hItem, GUI_MAKE_COLOR(0x00F0FF00));
TEXT_SetText(hItem, "空山新雨后 天气晚来秋");
TEXT_SetTextAlign(hItem, GUI_TA_HCENTER | GUI_TA_VCENTER);
hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_0);
BUTTON_SetFont(hItem, &GUI_Fontkai16);//song16是生成的C文件名
BUTTON_SetText(hItem,"明月");
break;
case WM_NOTIFY_PARENT:
Id = WM_GetId(pMsg->hWinSrc);
NCode = pMsg->Data.v;
switch(Id) {
case ID_BUTTON_0: // Notifications sent by 'Hello'
switch(NCode) {
case WM_NOTIFICATION_CLICKED:
// USER START (Optionally insert code for reacting on notification message)
// USER END
break;
case WM_NOTIFICATION_RELEASED:
// USER START (Optionally insert code for reacting on notification message)
GUI_UC_SetEncodeUTF8();
btnhandle= WM_GetDialogItem(pMsg->hWin, ID_BUTTON_0);
TEXT_SetFont(btnhandle, &GUI_Fontkai16);//song16是生成的C文件名
BUTTON_SetText(btnhandle,"明月");
LED1_TOGGLE;
// USER END
break;
// USER START (Optionally insert additional code for further notification handling)
// USER END
}
break;
// USER START (Optionally insert additional code for further Ids)
// USER END
}
break;
// USER START (Optionally insert additional message handling)
// USER END
default:
WM_DefaultProc(pMsg);
break;
}
}
六、编译通过后,接下来的操作要小心。
来到STemWin_Task文件夹下,复制一个DLG.c
记事本打开DLG.c 另存为,编码由ANSI改成UTF-16 LE 替换。关掉txt,回到KEIL5,提示你
选是,这个时候编译通过后,再烧录到板子,就能显示汉字了。
这个时候,一定要注意,UTF-16 LE下的DLG.c 不要修改,一旦修改了,再translate 或Build 都会报错,这个.c文件就像废了一样。。。
合理的方式是,再回到文件夹,把DLG.c记事本打开,另存为ANSI,再回到KEIL5,reload点是。这样才可以修改DLG.c
参考了
https://blog.csdn.net/weixin_42157650/article/details/86634119
https://www.cnblogs.com/fancyop/p/emWin_Chinese_Show_Tutorial.html