STM32 野火MINI 用FontCvtST.exe 生成.c文件 写汉字到文本框 按钮上

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

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

胸毛男

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值