硬汉嵌入式论坛

 找回密码
 立即注册
查看: 3319|回复: 6
收起左侧

[MDK] 哪个字体能显示小数字下标? 雅黑不行,宋体有点丑。。

[复制链接]

335

主题

2037

回帖

3047

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3047
发表于 2020-9-11 08:56:32 | 显示全部楼层 |阅读模式
mdk设置编辑器的字体。 需要小数字下标,比如化学中的一些元素表示。
Snipaste_2020-09-11_08-42-02.png   这是宋体,新宋体,可以显示出来。

Snipaste_2020-09-11_08-42-49.png   这是微软雅黑,没有哇~~~~~

有没有什么办法?

回复

使用道具 举报

335

主题

2037

回帖

3047

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3047
 楼主| 发表于 2020-9-11 09:02:13 | 显示全部楼层
还有更奇葩的事情,使用emwin生成字体,希望显示效果和代码界面一样。
Snipaste_2020-09-11_08-58-12.png 这是新宋体,没有小数字下标字体!!!然而,代码界面明明有的好吧。

Snipaste_2020-09-11_08-59-04.png 这是Arial Unicode MS字体,小数字下标很好看!
可惜这个不是等宽字体,mdk中的代码设置不了这一种。
回复

使用道具 举报

7

主题

85

回帖

111

积分

初级会员

积分
111
发表于 2020-9-11 09:52:05 | 显示全部楼层
阿里巴巴普惠体可以 QQ截图20200911095131.jpg
回复

使用道具 举报

335

主题

2037

回帖

3047

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3047
 楼主| 发表于 2020-9-11 13:34:51 | 显示全部楼层
JIKIMO 发表于 2020-9-11 09:52
阿里巴巴普惠体可以

请传一下这个字体文件,谢谢哈
回复

使用道具 举报

9

主题

81

回帖

113

积分

初级会员

积分
113
发表于 2020-9-11 14:05:52 | 显示全部楼层
硫酸根离子,4上面是2,就没法显示了。建议专门写一个化学式显示的函数,使用两种不同大小的字体,用个变量记录角标位置。至于你想通过字符串打印出来,可以在字符串中穿插一些不常用字符作为标识,比如想显示硫酸根离子的化学式,字符串可以写"|SO*2-&4","|"表示后面是原子,“*”表示后面是上标,“&”表示后面字符是下标。以前写的一个函数,希望对你有帮助:
  1. typedef enum
  2. {
  3.         CHAR_MID,       /* 正常字符 */
  4.         CHAR_UP,        /* 上标 */
  5.         CHAR_DOWN,      /* 下标 */
  6. } ChemCharType;

  7. /*
  8. ************************************************************************************************************************
  9. * 功能说明: 打印化学式。
  10. *
  11. * 形式参数: s: 化学式字符串:|后面是正常字符 <后面是上标 >后面是下标
  12. *
  13. * 形式参数: x: 字符串起始坐标x
  14. *
  15. * 形式参数: y: 字符串起始坐标y
  16. *
  17. * 形式参数: pFontAtom: 原子显示使用的字体
  18. *
  19. * 形式参数: pFontIon: 上标下标显示使用的字体
  20. *
  21. * 返 回 值: None
  22. ************************************************************************************************************************
  23. */
  24. void GUI_DispChemStrAt(const char * s, int x, int y, const GUI_FONT *pFontAtom, const GUI_FONT *pFontIon)
  25. {
  26.         GUI_POINT oringinMid, oringinUp, oringinDown;
  27.         int fontAtomSizeY, fontIonSizeY;
  28.         ChemCharType chemChar = CHAR_MID;

  29.         oringinMid.x = x;
  30.         oringinMid.y = y;

  31.         GUI_SetFont(pFontAtom);
  32.         fontAtomSizeY = GUI_GetFontSizeY();
  33.         GUI_SetFont(pFontIon);
  34.         fontIonSizeY = GUI_GetFontSizeY();
  35.         
  36.         oringinUp.x = x;
  37.         oringinUp.y = fontAtomSizeY/2 + y - 1 - fontIonSizeY;
  38.         oringinDown.x = x;
  39.         oringinDown.y = fontAtomSizeY/2 + y + 1;
  40.         
  41.         while (*s != '\0')
  42.         {
  43.                 if (*s == '|')          /* 正常字符 */
  44.                 {
  45.                         chemChar = CHAR_MID;
  46.                 }
  47.                 else if (*s == '<')     /* 上标 */
  48.                 {
  49.                         chemChar = CHAR_UP;
  50.                 }
  51.                 else if (*s == '>')     /* 下标 */
  52.                 {
  53.                         chemChar = CHAR_DOWN;
  54.                 }
  55.                 else                    /* 正常字符 */
  56.                 {
  57.                         switch (chemChar)
  58.                         {
  59.                                 case CHAR_MID:
  60.                                         GUI_SetFont(pFontAtom);
  61.                                         GUI_DispCharAt(*s, oringinMid.x, oringinMid.y);
  62.                                         oringinMid.x = oringinUp.x = oringinDown.x = GUI_GetDispPosX();
  63.                                         break;
  64.                                        
  65.                                 case CHAR_UP:
  66.                                         GUI_SetFont(pFontIon);
  67.                                         GUI_DispCharAt(*s, oringinUp.x, oringinUp.y);
  68.                                         oringinUp.x = GUI_GetDispPosX();
  69.                                         oringinMid.x = (oringinUp.x >= oringinDown.x) ? oringinUp.x : oringinDown.x;
  70.                                         break;
  71.                                        
  72.                                 case CHAR_DOWN:
  73.                                         GUI_SetFont(pFontIon);
  74.                                         GUI_DispCharAt(*s, oringinDown.x, oringinDown.y);
  75.                                         oringinDown.x = GUI_GetDispPosX();
  76.                                         oringinMid.x = (oringinUp.x >= oringinDown.x) ? oringinUp.x : oringinDown.x;
  77.                                         break;
  78.                         }
  79.                 }

  80.                 s++;
  81.         }
  82. }
复制代码


回复

使用道具 举报

3

主题

39

回帖

48

积分

新手上路

积分
48
QQ
发表于 2020-9-11 14:26:13 | 显示全部楼层
楼上的看看。

Alibaba PuHuiTi V1.1 for WIN.zip

47.91 MB, 下载次数: 89

普惠字库文件

回复

使用道具 举报

335

主题

2037

回帖

3047

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3047
 楼主| 发表于 2020-9-11 17:29:54 | 显示全部楼层

字体挺美了,可惜不是等宽得。。。mdk里面用不了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-12 13:29 , Processed in 0.190196 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表