使用Stream,PrintDocument,自己看看msdn吧。

解决方案 »

  1.   


    #include <stdlib.h>
    #include <stdio.h>
    #include <graphics.h>
    #include <string.h>#define HZK16 "hzk16"int test(unsigned int a,int k)
    {
    a<<=(k-1);
    if(a&0x80)
    return (1);
    else
    return (0);
    }
    void hz16(int X,int Y,char *zw,int c)
    { int n=0;
       while(n!=strlen(zw)){  register int i,j;
    register int xx=0;
    register int yy=0;
    FILE *fp;char *wm;long num;
    fp=fopen(HZK16,"rb++");
            if(fp==NULL){/*打开hzk16字库错误*/exit(0);}
    if((zw[n]&0x80)==0)
     {
      num=188+zw[n]-33;
      fseek(fp,(32)*num,0);
      fread(wm,32,1,fp);
      fclose(fp);
      for(i=0;i<32;i++)
         {for(j=1;j<=8;j++)
           if(test(wm[i],j)==0)
     xx++;
           else{putpixel((xx)+X,Y+yy,c);xx++;}
           if((i+1)%2==0){xx=0;yy++;}
                      }X=X+16;n=n+1;
       }else{
     zw[n]=zw[n]&0x7f;
     zw[n+1]=zw[n+1]&0x7f;
     zw[n]=zw[n]-0x20;
     zw[n+1]=zw[n+1]-0x20;
     num=(zw[n]-1)*94+(zw[n+1]-1);
     fseek(fp,(32)*num,0);
     fread(wm,32,1,fp);
     fclose(fp);
        for(i=0;i<32;i++)
         {for(j=1;j<=8;j++)
           if(test(wm[i],j)==0)
     xx++;
           else{putpixel((xx)+X,Y+yy,c);xx++;}
           if((i+1)%2==0){xx=0;yy++;}
                      }X=X+16;n=n+2;
     }}
    }这段代码怎么变成C#我变了一些,不过很多错误。。 static public void DrawString(string s, Font font, Brush brush, int x,int y, Graphics g)
    {
    int n = 0;
    while (s.Length != 0)
    {
    Pen p = new Pen(brush, 1);
    int i, j;
    int xx = 0;
    int yy = 0;
                    FileStream fs = File.OpenRead("HZK16");
    char[] zw = s.ToCharArray(0, s.Length);
    byte[] wm = null;
    long num;
    if ((zw[n] & 0x80) == 0)
    {
    num=188 + zw[n] - 33;
    fs.Seek((32) * num, 0);
    fs.Read(wm, 32, 1);
    fs.Close(); for(i=0;i<32;i++)
    {
    for(j=1;j<=8;j++)
    {
    if(test(wm[i],j))
    {
    xx++;
    }
    else
    {
    g.DrawLine(p, new Point(xx + x, yy + y), new Point(xx + x, yy + y));
    //putpixel((xx)+X,Y+yy,c);
    xx++;
    }
    }  //end of for 

    if((i + 1) % 2 == 0)
    {
    xx=0;
    yy++;
    }
    } // end of for  x = x + 16;
    n = n + 1;
    }
    else
    {
    zw[n] = zw[n] & 0x7f;
    zw[n+1] = zw[n+1] & 0x7f;
    zw[n] = zw[n] - 0x20;
    zw[n+1] = zw[n+1] - 0x20;
    num = (zw[n] - 1) * 94 + (zw[n+1] - 1);
    fs.Seek(32 * num, 0);
    fs.Read(wm, 32, 1);
    for(i=0;i<32;i++)
    {
    for(j=1;j<=8;j++)
    {
    if(test(wm[i],j)==0)
    {
    xx++;
    }
    else
    {
    g.DrawCurve(p, new Point(xx + x, yy + y));
    //putpixel((xx)+X,Y+yy,c);
    xx++;
    }
    } if ((i+1) % 2 == 0)
    {
    xx=0;
    yy++;
    }
    } X=X+16;
    n=n+2;
    } }

    } //end of method DrawString static public bool test(int a,int k)
    {
    a << =(k-1);
    if (a & 0x80)
    return true;
    else
    return false;
    }不知道正确应该怎么改