⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xcd0.c

📁 在win-tc urboc2.0下运行
💻 C
字号:
#define ENTER     0x1c0d
#define UP        0x4800
#define DOWN      0x5000
#define RIGHT     0x4d00
#define LEFT      0x4b00
#define ESC       0x011b

#define DEBUG

#include<graphics.h>
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<process.h>
#include<dos.h>
#include<bios.h>
#include<alloc.h>



void hanzi16(int x,int y,char *s,int colour);
void initgraphics(void);
int get_key();
void activemainmenu(int select);
void activesubmenu(int numb);
int managesubmenu(int number);
void managemainmenu(void);
void submenu1();
void submenu2();
void submenu3();
void submenu4();
void mainmenu();
void subfunction();


void *buffer;
void *mainbuf;
void *subbuf1,*subbuf2,*subbuf3, *subbuf4;
int h,n,sn,w;
int subitem1,subitem2,subitem3,subitem4,subsize;

                                              /* 主函数*/
main()
{initgraphics();
 mainmenu();
 managemainmenu();
 getch();
 closegraph();

}




void initgraphics()                       /*图形初始化函数*/
{
 int gd=DETECT,gm,errorcode;
 subitem1=4;
 subitem2=6;
 subitem3=3;
 subitem4=4;

 initgraph(&gd,&gm,"c:\\turboc2");
 cleardevice();
 errorcode=graphresult();
 if(errorcode!=0)
    {
     printf("Graphics error:%s\n",grapherrormsg(errorcode));
     printf("Press any key to halt!\n");
     getch();
     exit(1);
     }
}

void mainmenu()                   /*显示主菜单*/
{
 int x,y,size;
 x=639;
 y=479;
 n=1;
 h=3*textheight("t");
 w=textwidth("t");
 size=imagesize(1,50,126,49+h);
 mainbuf=malloc(size);
 if(mainbuf!=NULL)
 { setfillstyle(1,MAGENTA);
  bar(1,50,126,49+h);
 setbkcolor(1);
 setcolor(RED);
 rectangle(0,0,x,y);
 rectangle(0,0,x,h);
 setfillstyle(1,LIGHTGRAY);
 bar(1,1,x-1,h-1);
 hanzi16(3*w,3,"文件",0);
 hanzi16(18*w,3,"编辑",0);
 hanzi16(33*w,3,"工具",0);
 hanzi16(48*w,3,"菜单四",0);

  getimage(3,52,124,47+h,mainbuf);
  setfillstyle(1,BLUE);
  bar(1,50,127,50+h);
  activemainmenu(n); }
  else {printf("out of memory!");exit(1);}

}


void submenu1()                                               /* 子菜单1*/
{
 int i;
 sn=1;
for(i=1;i<=subitem1;i++)
   {
    setcolor(RED);
    rectangle(1,i*h,126,i*h+h);
    setfillstyle(1,LIGHTGRAY);
    bar(2,i*h+1,125,i*h+h-1);
    }
 hanzi16(2*w,h+3,"新建文件",0);
 hanzi16(2*w,2*h+3,"打开文件",0);
 hanzi16(2*w,3*h+3,"保存文件",0);
 hanzi16(2*w,4*h+3,"退出",0);
 putimage(2,h+2,mainbuf,XOR_PUT);
 }

void submenu2()                                         /* 子菜单2*/
{ int i;
  sn=1;
 for(i=1;i<=subitem2;i++)
   {setcolor(RED);
    rectangle(16*w,i*h,16*w+126,i*h+h);
    setfillstyle(1,LIGHTGRAY);
    bar(16*w+1,i*h+1,16*w+125,i*h+h-1);
    }
 hanzi16(17*w,h+3,"撤消",0);
 hanzi16(17*w,2*h+3,"复制",0);
 hanzi16(17*w,3*h+3,"粘贴",0);
 hanzi16(17*w,4*h+3,"全选",0);
 hanzi16(17*w,5*h+3,"查找",0);
 hanzi16(17*w,6*h+3,"替换",0);
 putimage(16*w+1,h+2,mainbuf,XOR_PUT);
 subsize=imagesize(16*w,h,16*w+126,subitem2*h+h);
 subbuf1=malloc(subsize);
 if(subbuf2!=NULL)getimage(16*w,h,16*w+126,subitem2*h+h,subbuf2);
 }

void submenu3()                                         /* 子菜单3*/
{ int i;
 sn=1;
 bar(48*w,h,639,7*h);
 for(i=1;i<=subitem3;i++)
   {setcolor(RED);
    rectangle(32*w,i*h,32*w+126,i*h+h);
    setfillstyle(1,LIGHTGRAY);
    bar(32*w+1,i*h+1,32*w+125,i*h+h-1);
    }
 hanzi16(33*w,h+3,"阿赛码字符集",0);
 hanzi16(33*w,2*h+3,"点阵字模工具",0);
 hanzi16(33*w,3*h+3,"中文运行环境",0);
 putimage(32*w+1,h+2,mainbuf,XOR_PUT);
 subsize=imagesize(32*w,h,32*w+126,subitem3*h+h);
 subbuf1=malloc(subsize);
 if(subbuf3!=NULL)getimage(32*w,h,32*w+126,subitem3*h+h,subbuf3);
 }

void submenu4()                                         /* 子菜单4*/
{ int i;
 sn=1;
 for(i=1;i<=subitem4;i++)
   {setcolor(RED);
    rectangle(48*w,i*h,48*w+126,i*h+h);
    setfillstyle(1,LIGHTGRAY);
    bar(48*w+1,i*h+1,48*w+125,i*h+h-1);
    }
 hanzi16(49*w,h+3,"菜单一",0);
 hanzi16(49*w,2*h+3,"菜单二",0);
 hanzi16(49*w,3*h+3,"菜单三",0);
 hanzi16(49*w,4*h+3,"菜单四",0);
 putimage(48*w+1,h+2,mainbuf,XOR_PUT);
 subsize=imagesize(48*w,h,48*w+126,subitem4*h+h);
 subbuf1=malloc(subsize);
 if(subbuf4!=NULL)getimage(48*w,h,48*w+126,subitem4*h+h,subbuf4);
 }


void managemainmenu(void)                         /*管理主菜单*/
{
 unsigned key;

 while(1)
 {
 setfillstyle(1,1);
 bar(1,h,639,7*h);
 key=get_key();
  switch(key)
   {case LEFT:
        {
         if(n==1){activemainmenu(n);n=4;activemainmenu(n);break;}
         else    {activemainmenu(n);n--;activemainmenu(n);break;}
         }

    case RIGHT:
         {
          if(n==4){activemainmenu(n);n=1;activemainmenu(n); break;}
          else    {activemainmenu(n);n++;activemainmenu(n); break;}
          }

    case ENTER: {managesubmenu(n); break;}
    case DOWN:  {managesubmenu(n); break;}
    case ESC:   exit(0);
   }
  }
}


int managesubmenu(int number)                         /*管理子菜单*/
{int num;
 num=number;

 switch(num)
 {
  case 1:{submenu1();activesubmenu(1);break;}
  case 2:{submenu2();activesubmenu(2);break;}
  case 3:{submenu3();activesubmenu(3);break;}
  case 4:{submenu4();activesubmenu(4);break;}
  }
}





/* x,y为显示坐标,s为显示字符串,colour为颜色 */
void hanzi16(int x,int y,char *s,int colour)        /* 汉字显示函数   */
{
FILE *fp;
char buffer[32]; /* 32字节的字模缓冲区 */
register i,j,k;
unsigned char qh,wh;
unsigned long location;
if((fp=fopen("hzk16","rb"))==NULL)
{
printf("Can't open hzk16!");
getch();
exit(0);
}
while(*s)
{
qh=*s-0xa0;
wh=*(s+1)-0xa0;
location=(94*(qh-1)+(wh-1))*32L; /* 计算汉字字模在文件中的位置 */
fseek(fp,location,SEEK_SET);
fread(buffer,32,1,fp);
for(i=0;i<16;i++)
for(j=0;j<2;j++)
for(k=0;k<8;k++)
if(((buffer[i*2+j]>>(7-k))&0x1)!=NULL)
putpixel(x+8*j+k,y+i,colour);
s+=2;
x+=16; /* 汉字间距 */
}
fclose(fp);
}

int get_key()             /*得到按键扫描码*/
{union REGS reg;
reg.h.ah=0;
int86(0x16,&reg,&reg);
return reg.x.ax;}


void activemainmenu(int select)                     /*激活主菜单*/
{ int i;
  i=select;

  switch(i)
   {case 1:
        {putimage(1,3,mainbuf,XOR_PUT);break;}
   case 2:
        {putimage(16*w,3,mainbuf,XOR_PUT);break;}
   case 3:
        {putimage(32*w,3,mainbuf,XOR_PUT);break;}
   case 4:
        {putimage(48*w,3,mainbuf,XOR_PUT);break;}
    }
}


void activesubmenu(int numb)                          /*激活子菜单*/
{
 int j,f;
 j=numb;


 while(1)
   {
    unsigned key;
    key=get_key();
    switch(key)
      {
      case DOWN:
               switch(j)
                 {
                  case 1: if(sn!=4){putimage(2,sn*h+2,mainbuf,XOR_PUT);sn++;putimage(2,sn*h+1,mainbuf,XOR_PUT);break;}
                              else {putimage(2,sn*h+2,mainbuf,XOR_PUT);sn=1;putimage(2,sn*h+1,mainbuf,XOR_PUT);break;}
                  case 2: if(sn!=6){putimage(16*w+1,sn*h+2,mainbuf,XOR_PUT);sn++;putimage(16*w+1,sn*h+1,mainbuf,XOR_PUT);break;}
                              else {putimage(16*w+1,sn*h+2,mainbuf,XOR_PUT);sn=1;putimage(16*w+1,sn*h+1,mainbuf,XOR_PUT);break;}
                  case 3: if(sn!=3){putimage(32*w+1,sn*h+2,mainbuf,XOR_PUT);sn++;putimage(32*w+1,sn*h+1,mainbuf,XOR_PUT);break;}
                              else {putimage(32*w+1,sn*h+2,mainbuf,XOR_PUT);sn=1;putimage(32*w+1,sn*h+1,mainbuf,XOR_PUT);break;}
                  case 4: if(sn!=4){putimage(48*w+1,sn*h+2,mainbuf,XOR_PUT);sn++;putimage(48*w+1,sn*h+1,mainbuf,XOR_PUT);break;}
                              else {putimage(48*w+1,sn*h+2,mainbuf,XOR_PUT);sn=1;putimage(48*w+1,sn*h+1,mainbuf,XOR_PUT);break;}
                  }  break;
      case UP:
                switch(j)
                 {
                  case 1: if(sn!=1){putimage(2,sn*h+2,mainbuf,XOR_PUT);sn--;putimage(2,sn*h+2,mainbuf,XOR_PUT);break;}
                              else {putimage(2,sn*h+2,mainbuf,XOR_PUT);sn=4;putimage(2,sn*h+2,mainbuf,XOR_PUT);break;}
                  case 2: if(sn!=1){putimage(16*w+1,sn*h+2,mainbuf,XOR_PUT);sn--;putimage(16*w+1,sn*h+2,mainbuf,XOR_PUT);break;}
                              else {putimage(16*w+1,sn*h+2,mainbuf,XOR_PUT);sn=6;putimage(16*w+1,sn*h+2,mainbuf,XOR_PUT);break;}
                  case 3: if(sn!=1){putimage(32*w+1,sn*h+2,mainbuf,XOR_PUT);sn--;putimage(32*w+1,sn*h+2,mainbuf,XOR_PUT);break;}
                              else {putimage(32*w+1,sn*h+2,mainbuf,XOR_PUT);sn=3;putimage(32*w+1,sn*h+2,mainbuf,XOR_PUT);break;}
                  case 4: if(sn!=1){putimage(48*w+1,sn*h+2,mainbuf,XOR_PUT);sn--;putimage(48*w+1,sn*h+2,mainbuf,XOR_PUT);break;}
                              else {putimage(48*w+1,sn*h+2,mainbuf,XOR_PUT);sn=4;putimage(48*w+1,sn*h+2,mainbuf,XOR_PUT);break;}
                  }break;
     /* case LEFT: {managemainmenu();break;}  */
      /*case RIGHT:{managemainmenu();break;} */

      case ENTER:{subfunction();break;}
      case ESC:{ managemainmenu();break;}
       }
    }


}


void subfunction()
{
 setbkcolor(MAGENTA);
 cleardevice();
 setcolor(CYAN);
 outtextxy(200,200,"This is an example! press any key to exit");
 getch();
 exit(0);
 }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -