m3在屏幕上显示汉字

[复制链接]
7457|29
qin552011373 发表于 2011-8-28 16:42 | 显示全部楼层
学习了
heweibig 发表于 2011-8-28 16:47 | 显示全部楼层
没看出来显示汉字的过程
keken 发表于 2011-8-29 07:11 | 显示全部楼层
可以先看看版主发的两个历程参考下
rayaohb 发表于 2011-9-1 10:39 | 显示全部楼层
本帖最后由 rayaohb 于 2011-9-1 10:43 编辑
希望能早点有个汉字和字符混合显示的方法出来。   19楼得问题现在应该解决了吧?你就是加我QQ的那个吧
xifengsong 发表于 2011-8-26 17:03


typ_CHFont g_CHData16[]=
{
  {ASCII_16x8_TAB,"1"},
  {CHFont16_Xu,"德"},
  {CHFont16_Dian,"州"},
  {CHFont16_Chi,"仪"},
  {CHFont16_Ya,"器"},
  {CHFont16_Temp,"℃"}
  
};  //其中ASCII_16x8_TAB为所有英文的字库首指针,按照ASCII码排列

混合显示英文汉字 只需要修改string.c  中的GrStringDraw函数,下面给一个汉字16*16 英文16*8的,其实你自己也可以做成通用的
//判断是否为中文
    if(sCon.pFont->ucFormat == FONT_CH_STYLE )
    {
       unsigned char CHFontNum,width,i,m,Colum;
       Colum=2;
       while(*pcString&&lLength--)
       {
         if(*pcString=='\n')
        {
          lY=lY+16;
          lX=lXReset;
          pcString++;
          continue;
         }
         if(*pcString<128)
           width=(sCon.pFont->ucMaxWidth)/2;  //英文16x8
         else
           width=sCon.pFont->ucMaxWidth;      //中文16*16
         
         //先画背景 再画前景  这样可以反色显示汉字英文等
          sCon.ulForeground=pContext->ulBackground;
          for(i=0; i<width; i++)
          {
              GrLineDrawV(&sCon, lX + i, lY, lY + sCon.pFont->ucHeight);
          }
         
          //确定字符在列表中的位置
          unsigned char CharIndex,Temp;
          if(*pcString<128)
          {
              Temp=*pcString;
              if(*pcString>31)    //英文字库按照ASCII排列的
                Temp-=32;
              CharIndex=0;       //英文字符在数组中排在第一个 指向英文字库首指针
          }
          else
          {
             for(CHFontNum=0;CHFontNum<sCon.pFont->pusOffset[0];CHFontNum++)
             {
                if((sCon.pFont->CHFontdata[CHFontNum].Index[0]==pcString[0])&&
                   (sCon.pFont->CHFontdata[CHFontNum].Index[1]==pcString[1]))
                {
                  CharIndex=CHFontNum;  //汉字在数组中的位置
                  Temp=0;
                }
             }
          }
          for(m=0; m<Colum; m++)
          {
                for(i=0; i<width; i++)
                {
                   lIdx=1;
                   lBit=0;
                   while(lBit<9)
                   {
                      if(sCon.pFont->CHFontdata[CharIndex].Msk[Temp*width*Colum+i+m*width]&lIdx)
                      {
                         sCon.ulForeground=pContext->ulForeground;
                         GrPixelDraw(&sCon,lX+i,lY+lBit+8*m);
                       }
                       lIdx=lIdx<<1;
                       lBit++;
                   }
                }
           }
            
          lX=lX+width;
          if(*pcString<128)
            pcString+=1;
          else
            pcString+=2;
       }
    }
dewlife 发表于 2011-9-1 11:21 | 显示全部楼层
这个是不是得需要字库啊?
logic21 发表于 2011-9-1 12:20 | 显示全部楼层
多谢各位  我问题已经解决
xifengsong 发表于 2011-8-18 14:12

恭喜!
Peter_zb 发表于 2011-9-1 15:29 | 显示全部楼层
21# xifengsong
其实也可以显示字母,就是格式跟汉字一样,也占一个word
Peter_zb 发表于 2011-9-1 15:31 | 显示全部楼层
26# dewlife
不需要字库,只是字模而已
keken 发表于 2011-9-11 19:01 | 显示全部楼层
例子很有惨老价值
keken 发表于 2011-9-11 19:01 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部