发新帖我要提问
12
返回列表
打印

m3在屏幕上显示汉字

[复制链接]
楼主: xifengsong
手机看帖
扫描二维码
随时随地手机跟帖
21
qin552011373| | 2011-8-28 16:42 | 只看该作者 回帖奖励 |倒序浏览
学习了

使用特权

评论回复
22
heweibig| | 2011-8-28 16:47 | 只看该作者
没看出来显示汉字的过程

使用特权

评论回复
23
keken| | 2011-8-29 07:11 | 只看该作者
可以先看看版主发的两个历程参考下

使用特权

评论回复
24
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;
       }
    }

使用特权

评论回复
25
dewlife| | 2011-9-1 11:21 | 只看该作者
这个是不是得需要字库啊?

使用特权

评论回复
26
logic21| | 2011-9-1 12:20 | 只看该作者
多谢各位  我问题已经解决
xifengsong 发表于 2011-8-18 14:12

恭喜!

使用特权

评论回复
27
Peter_zb| | 2011-9-1 15:29 | 只看该作者
21# xifengsong
其实也可以显示字母,就是格式跟汉字一样,也占一个word

使用特权

评论回复
28
Peter_zb| | 2011-9-1 15:31 | 只看该作者
26# dewlife
不需要字库,只是字模而已

使用特权

评论回复
29
keken| | 2011-9-11 19:01 | 只看该作者
例子很有惨老价值

使用特权

评论回复
30
keken| | 2011-9-11 19:01 | 只看该作者
参考

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则