哈夫曼编/译码器(4)[共四部分]
不是不想多放些分,我确实没有了,帮帮我!!!
void Refresh(int itemnumber,char** item,int index)
{
int i;
settextstyle(TRIPLEX_FONT,HORIZ_DIR,2);
settextjustify(CENTER_TEXT,CENTER_TEXT);
for(i=0;i<itemnumber;i++)
{
if(i!=index) {
DrawRoundRect(164,155+i*50,474,195+i*50,BROWN,BLUE);
setcolor(GREEN);
outtextxy(319,175+i*50,item[i]); }
else {
DrawRoundRect(164,155+i*50,474,195+i*50,BROWN,DARKGRAY);
setcolor(GREEN);
outtextxy(319,175+i*50,item[i]); }
}
}
int ShowMenu(int itemnumber,char** item)
{ int *backup; int index=0,get;
backup=(int*)malloc(imagesize(159,150,479,150+itemnumber*50));
getimage(159,150,479,150+itemnumber*50,backup);
Refresh(itemnumber,item,index);
while((get=GetChar())!=ENTER)
{
switch(get)
{
case UP: if(index>0) index--;
else index=itemnumber-1; break;
case DOWN: if(index<itemnumber-1) index++;
else index=0; break;
}
Refresh(itemnumber,item,index);
}
putimage(159,150,backup,COPY_PUT);
free(backup);
return(index);
}
char* InputBox(char* msg)
{
int *backup; int get,i; char getstr[40]; int p=0;
backup=(int*)malloc(imagesize(149,200,490,275));
getimage(149,200,490,275,backup);
DrawRect(154,210,484,270,BROWN,BLUE);
settextjustify(LEFT_TEXT,CENTER_TEXT);
outtextxy(160,230,msg);
setfillstyle(SOLID_FILL,YELLOW);
setlinestyle(SOLID_LINE,0,THICK_WIDTH);
setcolor(WHITE); moveto(158,262);
lineto(482,262); lineto(482,238);
setcolor(BLACK); moveto(158,262);
lineto(158,238); lineto(482,238);
setcolor(RED); bar(160,240,480,260);
getstr[39]='\0';
for(i=0;i<39;i++) getstr[i]=' ';
while((get=GetChar())!=ENTER)
{ if(get==BACKSPACE&&p>0)
{ p--; getstr[p]=' ';
bar(160,240,480,260);
}
else
{ if(p<39)
{ getstr[p++]=(char)get; }
}
outtextxy(160,250,getstr);
}
putimage(149,200,backup,COPY_PUT);
free(backup); getstr[p]='\0';
return(getstr);
}
void OutputBox(int linenumber,char** get)
{
int *backup,i,start=0,time=0,left,height;
if(linenumber<10) height=linenumber;
else height=10;
backup=(int*)malloc(imagesize(149,150,490,160+height*20));
getimage(149,150,490,160+height*20,backup);
outputagain:
DrawRect(154,155,485,155+height*20,BROWN,CYAN);
setcolor(BLACK);
moveto(157,152+height*20);
lineto(157,158); lineto(482,158);
setcolor(WHITE); lineto(482,152+height*20);
lineto(157,152+height*20); setcolor(YELLOW);
settextjustify(LEFT_TEXT,CENTER_TEXT);
left=linenumber-start;
for(i=start;i<start+10&&i<start+left;i++)
{ outtextxy(175,165+(i-time*10)*20,get[i]); }
getch(); time++;
start+=10; left-=10;
if(left>0) goto outputagain;
putimage(149,150,backup,COPY_PUT);
free(backup);
}
char MsgBox(char *msg)
{
int *backup; char get;
backup=(int*)malloc(imagesize(150,200,490,250));
getimage(150,200,490,250,backup);
DrawRect(153,203,487,247,BROWN,CYAN);
setcolor(WHITE); moveto(156,244);lineto(156,206);
lineto(485,206); setcolor(BLACK);
lineto(485,244); lineto(156,244);
setcolor(YELLOW);
settextjustify(CENTER_TEXT,CENTER_TEXT);
outtextxy(320,225,msg);
get=getch();
putimage(150,200,backup,COPY_PUT);
free(backup); return(get);
}
void SaveHuff()
{
char *getstr; char filename[13];
FILE *fp; int i=0;
getstr=InputBox("Input filename:");
while(getstr[i]!='\0')
{ filename[i]=getstr[i]; i++; }
filename[i]='\0';
fp=fopen(filename,"wb");
if(fp==NULL)
{ MsgBox("Save Error!"); return;}
fprintf(fp,"%d",ValueNumber);
fseek(fp,4,0);
fwrite(CodeTree,sizeof(HuffCode),ValueNumber*2-1,fp);
fclose(fp);
MsgBox("The current HuffCode Saved.");
}