2013-12-21
展开全部
用任何一种32位或者64位的C/C++的编译器,就可以解决问题;
在16位的TC下,无法实现真实的宽字符输出; 如果你非要在TC下输出中文,可用这个方法: 先去下载一个hzk16放在C盘下,然后用我的方法就可以显示汉字了。
#include "stdio.h"
#include "graphics.h"
#include "stdlib.h"
FILE *fp;
FILE *fp;
void main()
{
int gd=VGA,gm=VGAHI;
int x,y,i;
initgraph(&gd,&gm,"");
if((fp=fopen("C:\\hzk16","rb"))==NULL)/*打开字体文件*/
{
printf("Can't open hzk16,Please add it");
getch();
closegraph();
exit(0);
}
/*显示汉字和英文*/
y=100;
txtopt(100,y,1,1,"按下密码加回车你会知道一个大秘密",5);
getch();
fclose(fp);
}
int txtopt(int x,int y,int z,int tmp,char *hz,int clr)
{
char *p;/*临时指针,用于计算输入的字符串长度,和以下3个变量一起用于计算横坐标偏移量*/
int xoffset=0;/*横坐标偏移量计算结果*/
int oldx;/*因x的值在画点时会有改变,所以这里存放原始的x的值*/
int ROW=1,COL=1;
char buffer[32];
int m,n,i,j,k;
unsigned char qh,wh;
unsigned long offset;
/*计算x偏移量*/
p=hz;
oldx=x;
while(p[xoffset++]!='\0');
if(tmp==0)/*显示英文半角字符*/
{
setcolor(clr);
outtextxy(x,y,hz);
return oldx+(xoffset-1)*8;/*返回紧接该字符串末尾的横左标*/
}
while(*hz)/*显示汉字*/
{
qh=*(hz)-0xa0;
wh=*(hz+1)-0xa0;
offset=(94*(qh-1)+(wh-1))*32L;
fseek(fp,offset,SEEK_SET);
fread(buffer,32,1,fp);
for (i=0;i<16;i++)
for(n=0;n<ROW;n++)
for(j=0;j<2;j++)
for(k=0;k<8;k++)
for(m=0;m<COL;m++)
if (((buffer[i*2+j]>>(7-k))&0x1)!=NULL)
putpixel(x+8*j*COL+k*COL+m,y+i*ROW+n,clr);
hz+=2;
x+=(z*16);
}
return oldx+(xoffset-1)*8;/*返回紧接该字符串末尾的横左标*/
}
在16位的TC下,无法实现真实的宽字符输出; 如果你非要在TC下输出中文,可用这个方法: 先去下载一个hzk16放在C盘下,然后用我的方法就可以显示汉字了。
#include "stdio.h"
#include "graphics.h"
#include "stdlib.h"
FILE *fp;
FILE *fp;
void main()
{
int gd=VGA,gm=VGAHI;
int x,y,i;
initgraph(&gd,&gm,"");
if((fp=fopen("C:\\hzk16","rb"))==NULL)/*打开字体文件*/
{
printf("Can't open hzk16,Please add it");
getch();
closegraph();
exit(0);
}
/*显示汉字和英文*/
y=100;
txtopt(100,y,1,1,"按下密码加回车你会知道一个大秘密",5);
getch();
fclose(fp);
}
int txtopt(int x,int y,int z,int tmp,char *hz,int clr)
{
char *p;/*临时指针,用于计算输入的字符串长度,和以下3个变量一起用于计算横坐标偏移量*/
int xoffset=0;/*横坐标偏移量计算结果*/
int oldx;/*因x的值在画点时会有改变,所以这里存放原始的x的值*/
int ROW=1,COL=1;
char buffer[32];
int m,n,i,j,k;
unsigned char qh,wh;
unsigned long offset;
/*计算x偏移量*/
p=hz;
oldx=x;
while(p[xoffset++]!='\0');
if(tmp==0)/*显示英文半角字符*/
{
setcolor(clr);
outtextxy(x,y,hz);
return oldx+(xoffset-1)*8;/*返回紧接该字符串末尾的横左标*/
}
while(*hz)/*显示汉字*/
{
qh=*(hz)-0xa0;
wh=*(hz+1)-0xa0;
offset=(94*(qh-1)+(wh-1))*32L;
fseek(fp,offset,SEEK_SET);
fread(buffer,32,1,fp);
for (i=0;i<16;i++)
for(n=0;n<ROW;n++)
for(j=0;j<2;j++)
for(k=0;k<8;k++)
for(m=0;m<COL;m++)
if (((buffer[i*2+j]>>(7-k))&0x1)!=NULL)
putpixel(x+8*j*COL+k*COL+m,y+i*ROW+n,clr);
hz+=2;
x+=(z*16);
}
return oldx+(xoffset-1)*8;/*返回紧接该字符串末尾的横左标*/
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
AiPPT
2024-09-19 广告
2024-09-19 广告
随着AI技术的飞速发展,如今市面上涌现了许多实用易操作的AI生成工具1、简介:AiPPT: 这款AI工具智能理解用户输入的主题,提供“AI智能生成”和“导入本地大纲”的选项,生成的PPT内容丰富多样,可自由编辑和添加元素,图表类型包括柱状图...
点击进入详情页
本回答由AiPPT提供
2013-12-21
展开全部
ucdos中文环境就可以。貌似还有其他一些中文dos环境,但是很久远,记不住名称了。呵呵。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询