标题:菜鸟「求助」 西文DOS下显示16点阵汉字的问题
取消只看楼主
roblou
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2013-3-30
结帖率:100%
已结贴  问题点数:20 回复次数:2 
菜鸟「求助」 西文DOS下显示16点阵汉字的问题
源代码在下面的
可以运行,运行后只显示汉字“西文”,后面的“DOS下显示16点阵汉字”就没有了。然后在   char *Str="西文DOS下显示16点阵汉字"   语句中去掉“DOS”后,运行后就显示为“西文下显示” ……总之就是不能显示英文或数字,摸索不出来不知道怎么改,求指导
#include<conio.h>
#include<graphics.h>
#include<stdio.h>
#include<stdlib.h>
FILE *fp;
void InitGra(void);
int OpenLIB(void);
void Quit(void);
void PutCC16(int,int,int,int,char*Str);
void ErrMsg();
int main(void)
{
    char *Str="西文DOS下显示16点阵汉字";
    InitGra();
    if(! OpenLIB())ErrMsg();
    PutCC16(0,100,2,YELLOW,Str);
    getch();
    Quit();
    return(0);
}
void InitGra(void)
{
    int GraphDrive=DETECT,GraphMode;
    registerbgidriver(EGAVGA_driver);
    initgraph(&GraphDrive,&GraphMode,"C:\\TC30\\BGI");
}
int OpenLIB()
     {
        if((fp=fopen("C:\\TC30\\HZK16","rb"))==NULL) return(0);
         return(1);
     }
void Quit(void)
     {
    closegraph();
    fcloseall();
    exit(0);
        }
void PutCC16(int x,int y,int Wid,int Color,char *Str)
{
  unsigned Zcode,Bcode;
  int i,j,k,Rec;
  long Len;
  char Buf[32];
  while(*Str)
  {
    if ((*Str&0x80)&&(*(Str+1)&0x80))
    {
     Zcode=(*Str-0xa1)&0x07f;
    Bcode=(*(Str+1)-0xa1)&0x07f;
    Rec=Zcode*94+Bcode;
    Len=Rec*32L;
    fseek(fp,Len,SEEK_SET);
    fread(Buf,1,32,fp);
    for (i=0;i<16;i++)
    for (j=0;j<2;j++)
    for (k=0;k<8;k++)
      if (Buf[i*2+j]>>(7-k)&1)
      putpixel(x+j*8+k,y+i,Color);
      x=x+16+Wid;
      Str+=2;
      }
    }
    return;
    }
   void ErrMsg()
   {
       printf("Open LIB File Error!");
       getch();
       Quit();
   }
搜索更多相关主题的帖子: void include 汉字 
2013-05-16 11:00
roblou
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2013-3-30
得分:0 
回复 5楼 TonyDeng
加了一小段,改成这样子呢?还是没法正确显示英文
#include<conio.h>
#include<graphics.h>
#include<stdio.h>
#include<stdlib.h>
FILE *fp;
void InitGra(void);
int OpenLIB(void);
void Quit(void);
void PutCC16(int,int,int,int,char*Str);
void ErrMsg();
int main(void)
{
    char *Str="西文DOS下显示16点阵汉字";
    InitGra();
    if(! OpenLIB())ErrMsg();
    PutCC16(0,100,2,YELLOW,Str);
    getch();
    Quit();
    return(0);
}
void InitGra(void)
{
    int GraphDrive=DETECT,GraphMode;
    registerbgidriver(EGAVGA_driver);
    initgraph(&GraphDrive,&GraphMode,"C:\\TC30\\BGI");
}
int OpenLIB()
     {
        if((fp=fopen("C:\\TC30\\HZK16","rb"))==NULL) return(0);
         return(1);
     }
void Quit(void)
     {
    closegraph();
    fcloseall();
    exit(0);
        }
void PutCC16(int x,int y,int Wid,int Color,char *Str)
{
  unsigned Zcode,Bcode;
  int i,j,k,Rec;
  long Len;
  char Buf[32];
  while(*Str)
  {
    if ((*Str&0x80)&&(*(Str+1)&0x80))
    {
     Zcode=(*Str-0xa1)&0x07f;
    Bcode=(*(Str+1)-0xa1)&0x07f;
    Rec=Zcode*94+Bcode;
    Len=Rec*32L;
    fseek(fp,Len,SEEK_SET);
    fread(Buf,1,32,fp);
    for (i=0;i<16;i++)
    for (j=0;j<2;j++)
    for (k=0;k<8;k++)
      if (Buf[i*2+j]>>(7-k)&1)
      putpixel(x+j*8+k,y+i,Color);
      x=x+16+Wid;
      Str+=2;
     }
      else
     {
      settextstyle(1,0,2);
      outtextxy(x,y,*Str);
      x=x+10+Wid;
      Str+=1;
     }

  }

    return;
}

   void ErrMsg()
   {
       printf("Open LIB File Error!");
       getch();
       Quit();
   }


2013-05-18 11:38
roblou
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2013-3-30
得分:0 
回复 4楼 TonyDeng
不是很明白
2013-05-18 11:39



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-407230-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.048002 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved