无忧启动论坛

标题: 我写的Windows98/DOS7启动动画LOGO制作工具源代码(C语言) [打印本页]

作者: turboy    时间: 2005-1-26 21:39
标题: 我写的Windows98/DOS7启动动画LOGO制作工具源代码(C语言)
  这是我以前写的一个小程序,用来制作Windows98/DOS7启动动画LOGO。去年把运行文件贴出后,有人提出要看源码,我自己觉得写得不好,就想改一下再传上来,但这事一放下就是几个月,自己都差点儿忘了。现在想还是先传上来再说,总有人愿意看的。程序的编译环境是DJGPP2+ALLEGRO3.11,自己准备吧。
引子&原理:
    现在,Windows95、Windows98、WindowsMe以其优秀的兼容性和易操作性仍占据了许多用户的计算机。当我们启动计算机时,都会看到一段带有滚动色条的LOGO-“蓝天白云”,这已经成为了Windows9x的标志。许多文章都透露,“蓝天白云”其实是位于C盘根目录下的一个文件LOGO.SYS,这其实是一个320X400X256色的BMP文件,用简单的“画图”就可以制作出来。但BMP是静态的,WindowsLOGO是如何将它动起来的呢?这涉及到调色板方面的知识。现在几乎所有的显卡都支持真彩色,但真彩色中的一个点需要至少24位的空间来存储,一个基本的640*480画面就需要640X480X3=921600字节,这对某些空间要求严格的程序来说太浪费了。因此几乎所有的显卡都支持调色板索引色方式,如VGA13H模式--此显示模式分辨率为320X200,可显示262144色(2^18),但因为使用了256项的调色板,所以同时只能显示262144色中的256色。虽牺牲了一部分色彩数,却使得每个点的占用空间缩小到了8位即一个字节,它记录着此色在调色板中的位置号,程序通过查表就可找到相应的RGB值并将之准确地显示出来。反过来说,我们甚至可以只修改调色板中记录的RGB值就可以使屏幕上部分点的色彩发生改变,而不用去重新绘点。微软的Windows9x系列在启动LOGO中就采用的方法与此类似:分辨率为320X400,同屏同时只显示256色,每个颜色对应调色板中的一种RGB色彩。当操作系统启动时,程序控制调色板最后的20项的颜色RGB分量按一定规则循环改变,屏幕上就使用了这20项色的点就出现了相应的动画效果--合理安排那些色点的位置就可以产生有趣的动画。现在有XrX Add Bar Utility,Animate Bar等工具可以在一个普通的BMP文件底部动画条效果,如果您更有创意的话,它们就不能胜任了--它们只能在图像的底部添加,源图像必须是320X400 256色的BMP文件--功能太少了。
    这就是这个程序产生的原因。本程序可以做到更多您所想要的效果,不信您就试试看。不过,由于我写程序的机器太老(P75)只能运行DOS,此程序是用命令行参数来控制的。相信这不会难着你吧!
软件名:
    LOGOBAR 易老师的LOGO.SYS动画条制作工具
版权说明:
    本程序是自由软件,还有待改进。您可以使用它,可以复制给朋友,如果您觉得它给了
您乐趣,希望Email给作者(yihuawie@163.com)分享。如果您有任何商用目的,也请先通
知作者。
作者:
    431700 湖北省天门市实验初级中学 易华卫
    Email: yihuawei@163.com
    主页: http://yisir.9126.com
版本:
    V1.0 beta,2004年6月25日于湖北省天门市麻洋镇支教时编译。
用法:
    LOGOBAR 源图像 [/选项]
          源图像    是一个您已经设计好的图像文件,格式可以是BMP,PCX,LBM,TGA,BTW,
                    最好是Windows标准的BMP格式,图像的尺寸可以是320X400,色彩数
                    为256。也可是其他值,程序可以自动转换成320X400X256。
选项:
    /TO=LOGO文件    将加了动画条的图像保存成LOGO文件,缺省值为LOGO.SYS。你可以使
                    用选项“/TO=C:\LOGO.SYS”来直接安装。
    /PO=BOTTON|TOP|LEFT|RIGHT|MASK[-]n 添加动画条的位置,缺省值为:BOTTON
         BOTTON     在图像下方添加动画条,类似Windows9x自带方式
         TOP        在图像上方添加动画条
         LEFT       在图像左侧添加动画条
         RIGHT      在图像右侧添加动画条
         MASK[-]n   在图像中指定为蒙板区域按指定规则绘制动画条(见“高级选项”)
    /BC=n           动画条使用的色彩数,缺省值为20
    /C1=色彩1      渐变色的起始色,以16进制表示RGB, 缺省值为 00FF00 (绿色)
    /C2=色彩2      渐变色的结束色,以16进制表示RGB, 缺省值为 000000 (黑色)
    /NP            不预览     /MT-  使用微软的另一种动画方式(不推荐)
高级选项:
    /PO=MASK[-]n  在图像中指定为蒙板区域按指定规则绘制动画条,约定图像的左上角
                  (0,0)像素点的颜色为蒙板色,图中所有以该色填充的区域构成蒙板区
                  域,在蒙板区域中根据n值有7种方式来绘制色条动画。
n=1       从左向右画竖色条,动画效果为色条向右运动
n=2       从上向下画横色条,动画效果为色条向下运动
n=3       从左上向右下画//形色条,动画效果为色条向右下运动
n=4       从右上向左下画\\形色条,动画效果为色条向左下运动
n=5       从中心向四周画辐射色,动画效果如风车顺时针转动
n=6       从中心向四周画同心椭圆,动画效果为椭圆由小变大
n=7       从中心向四周画同心矩形,动画效果为矩形由小变大
如果你在n前使用了“-”,那动画的运动方向将和上面相反。
示例:<CR>代表回车
    LOGOBAR mylogo.bmp<CR> 在mylogo.bmp的底部加上色条,预览,并保存为LOGO.SYS
    LOGOBAR mylogo.bmp /TO=C:\LOGO.SYS<CR>加色条后安装。
    LOGOBAR cat.bmp /PO=MASK7<CR>, 在图cai.bmp中按蒙板区域做矩形渐大动画效果。
    更多示例请运行DEMO.BAT。请注意DEMO.BMP和各参数与对应的效果。
/////////////////////////////////////////////////////////////
//源文件名:logobar.c
//作者:易华卫
//编写日期:2004年6月
//开发环境:DJGPP2+ALLEGRO3
//用途:用一个图文件生成Windows9x启动动画LOGO文件
//命令行说明:
//LOGOBAR 源图像 [/选项]
//源图像    是一个您已经设计好的图像文件,格式可以是BMP,PCX,LBM,TGA,BTW,
//最好是Windows标准的BMP格式,图像的尺寸可以是320X400,色彩数
//为256。也可是其他值,程序可以自动转换成320X400X256。
//选项:
///TO=LOGO文件    将加了动画条的图像保存成LOGO文件,缺省值为LOGO.SYS。你可以使
//用选项“/TO=C:\LOGO.SYS”来直接安装。
///PO=BOTTON|TOP|LEFT|RIGHT|MASK[-]n 添加动画条的位置,缺省值为:BOTTON
//BOTTON     在图像下方添加动画条,类似Windows9x自带方式
//TOP        在图像上方添加动画条
//LEFT       在图像左侧添加动画条
//RIGHT      在图像右侧添加动画条
//MASK[-]n   在图像中指定为蒙板区域按指定规则绘制动画条(见“高级选项”)
///BC=n           动画条使用的色彩数,缺省值为20
///C1=色彩1      渐变色的起始色,以16进制表示RGB, 缺省值为 00FF00 (绿色)
///C2=色彩2      渐变色的结束色,以16进制表示RGB, 缺省值为 000000 (黑色)
///NP            不预览     /MT-  使用微软的另一种动画方式(不推荐)
//高级选项:
///PO=MASK[-]n  在图像中指定为蒙板区域按指定规则绘制动画条,约定图像的左上角
//(0,0)像素点的颜色为蒙板色,图中所有以该色填充的区域构成蒙板区
//域,在蒙板区域中根据n值有7种方式来绘制色条动画。
//n=1       从左向右画竖色条,动画效果为色条向右运动
//n=2       从上向下画横色条,动画效果为色条向下运动
//n=3       从左上向右下画//形色条,动画效果为色条向右下运动
//n=4       从右上向左下画\\形色条,动画效果为色条向左下运动
//n=5       从中心向四周画辐射色,动画效果如风车顺时针转动
//n=6       从中心向四周画同心椭圆,动画效果为椭圆由小变大
//n=7       从中心向四周画同心矩形,动画效果为矩形由小变大
//如果你在n前使用了“-”,那动画的运动方向将和上面相反。
//详细说明见  logobar_cn.txt
/////////////////////////////////////////////////////////////
&#35;include <stdio.h>
&#35;include <math.h>
&#35;include <stdlib.h>
&#35;include <ctype.h>
&#35;include "allegro.h"
&#35;define AT_BOTTON0
&#35;define AT_TOP1
&#35;define AT_LEFT2
&#35;define AT_RIGHT3
&#35;define AT_MASK4
&#35;define FILL_H1   //Left - right
&#35;define FILL_V2   //top - botton
&#35;define FILL_LTRB3   //left_top - right_botton
&#35;define FILL_RTLB4   //right_top - left_botton
&#35;define FILL_ROTATE5   //rotate right/left
&#35;define FILL_CIRCLE6   //Circle center to outer
&#35;define FILL_RECT7   //Rectange
&#35;define FILL_END7
//globe variable
char srcfile[256]="\0",tagfile[256]="LOGO.SYS";
int  barcolors=20;  //motion logo used colors
int  motiontype=0;  //MS';s mode of pallete motion
int  position=AT_BOTTON; //Add bar here
int  fillmode=FILL_H; //Bar color filled mode
int  colordirect=0; //0=L-R/U-D/turn right, 1=R-L/D-U/turn left
int  maskcolor=0;
RGB  startcolor={0,255,0},endcolor={0,0,0};
int  nopreview=0;
char cmd_msg[]=
"Yisir';s WIN9x LOGO.SYS animate bar maker V1.0beta, 2004-6-25, Tianmen Hubei\n"
    "Usage:  LOGOBAR srcfile [/option]\n"
    "\tsrcfile  A image file(*.BMP,*.PCX,*.LBM,*.TGA)."
    "BTW, the Windows LOGO is 320*200 256 colors BMP file, but don';t worry, "
    "I will convert it for you.\n"
    "Option:\n"
    "\t/TO=filename  Save TO a bitmap file, default=LOGO.SYS.\n"
    "\t              You can use /TO=C:\\LOGO.SYS to install it now.\n"
    "\t/PO=BOTTON|TOP|LEFT|RIGHT|MASK[-]n position of colorbar, default:BOTTON\n"
    "\t/BC=n         color number of bar\n"
    "\t/C1=color1    Gradient start color, default: 00FF00 (green)\n"
    "\t/C2=color2    Gradient end color, default: 000000 (black)\n"
    "\t/NP           No preview     /MT-  use other Windows animate Type\n";
//    "Press any key to see more options...\n";
char more_msg[]=
"Advanced options:"
"/PO=MASK[-]n    use the color of top-left point as mask, with 7 fill mode\n"
"\tn=1      from left to right in mask area\n"
"\tn=2      from top to botton in mask area\n"
"\tn=3      from top-left to botton-right in mask area\n"
"\tn=4      from top-right to botton-left in mask area\n"
"\tn=5      windmill rotate in mask area\n"
"\tn=6      circle from center to outer in mask area\n"
"\tn=7      rectangle from center to outer in mask area\n"
"\tIf you use \"-\" , it will be filled with the contrary direction.\n"
"This is a freeware, welcome to visit my site http://yisir.9126.com to find more."
"Thank you for testing it, and I wish you like it."
;
char yisir_info[]=
"made by Yisir';s LOGOBAR, welcome to visit http://yisir.9126.com";
int htoi(char *hex);
int adject_pallete(BITMAP *bmp, RGB *pal);
int gen_barcolor(RGB *pal);
int preview(BITMAP *bmp, RGB *bmppal);
int makelogobar(void);
int init_argv(int argc, char* argv[]);

main(int argc, char* argv[])
{
allegro_init();
install_keyboard();
if (!init_argv(argc,argv))
{
printf("source file is %s, target file is: %s\n",srcfile,tagfile);
makelogobar();
}
allegro_exit();
return 0;
}
//convert hex string to integer
int htoi(char *hex)
{
int v=0;
char *p;
for(p=hex;*p;p++)
{
if (*p>=';0';&&*p<=';9';)
{
v*=16;
v+=*p-';0';;
}
else if (*p>=';A';&&*p<=';F';)
{
v*=16;
v+=*p-';A';+10;
}
else break;
}
return v;
}
//将源图像中的实际用色移到调色板的前端
int adject_pallete(BITMAP *bmp, RGB *pal)
{
int i,colorcounter,ips,ipt,x,y;
struct cpal_struct
{
int used;
int newidx;
} cpal[256];
PALLETE tmp;
//caculate color counter
printf("Adject color pallete, please wait a while.\n");
for (i=0;i<256;i++)
{
cpal.used=0;
cpal.newidx=0;
}
for (i=0;i<bmp->h;i++)
{
  int x;
  for (x=0;x<bmp->w;x++)
  {
     cpal[bmp->line[x]].used++;
  }
}
for (i=0,colorcounter=0;i<256;i++)
colorcounter+=(cpal.used?1:0);
printf("Used color number: %d\nNow pallete is being sorted...",colorcounter);
//Move maskcolor to the fisrt item in pallete
if (position==AT_MASK)
{
maskcolor=bmp->line[0][0];
bmp->line[0][0]=bmp->line[0][1];
cpal[maskcolor].newidx=0;
cpal[maskcolor].used=0;
maskcolor=0;
}
//the first color will be used to display background, so it is black.
tmp[0].r=0;
tmp[0].g=0;
tmp[0].b=0;
//adject, sort color, move used color to begin space.
ips=0;
ipt=1;
while (ips<256)
{
if (cpal[ips].used)
{
cpal[ips].newidx=ipt;
tmp[ipt]=pal[ips];
ipt++;
}
ips++;
}
//write new color index in picture
for (y=0;y<bmp->h;y++)
{
for (x=0;x<bmp->w;x++)
{
int t;
t=bmp->line[y][x];
bmp->line[y][x]=cpal[t].newidx;
}
}
//write picture pallete
for (i=0;i<256;i++)
pal=tmp;
printf(" Finished.\n");
return colorcounter;
}
//生成COLORBAR所用的渐变色
int gen_barcolor(RGB *pal)
{
//green
int i; //single color has 6 bits.
float dr,dg,db;
dr=(0.0+endcolor.r-startcolor.r)/barcolors*2;
dg=(0.0+endcolor.g-startcolor.g)/barcolors*2;
db=(0.0+endcolor.b-startcolor.b)/barcolors*2;
for (i=0;i<barcolors/2;i++)
{
pal[256-barcolors+i].r=pal[255-i].r=(startcolor.r+dr*i)/4;
pal[256-barcolors+i].g=pal[255-i].g=(startcolor.g+dg*i)/4;
pal[256-barcolors+i].b=pal[255-i].b=(startcolor.b+db*i)/4;
}
return 0;
}
//preview logo animater
int preview(BITMAP *bmp, RGB *bmppal)
{
PALLETE pal;
int i;
printf("\nPress any key to preview...\n");
while (!keypressed());
readkey();
for (i=0;i<256;i++)
pal=bmppal;
set_color_depth(8);
i=set_gfx_mode(GFX_MODEX,320,400,0,0);
/* Checks if any error occured during screen mode initialization   */
if ( i != 0 )
{
printf("Error setting graphics mode\n%s\n\n", allegro_error);
/* Shut down Allegro          */
/*allegro_exit ();*/
return 1;
}
set_palette(pal);
blit(bmp,screen,0,0,0,0,bmp->w,bmp->h);
textout_centre(screen,font,"Press any key to end...",160,370,255-barcolors/2);
while (!keypressed())
{
RGB tmp;
tmp=pal[256-barcolors];
for (i=256-barcolors;i<255;i++)
pal=pal[i+1];
pal[255]=tmp;
set_palette_range(pal,256-barcolors,255,1);
delay(200);
}
set_gfx_mode(GFX_TEXT,640,480,0,0);
return 0;
}
//主要程序
//在图像上加上色条并做成MS要求的格式
int makelogobar(void)
{
BITMAP *filebmp,*bmp;
PALLETE pal;
int i;
FILE *fp;
unsigned char *buf;
//Load image from file.
set_color_depth(8);
set_color_conversion(COLORCONV_REDUCE_TO_256);
filebmp=load_bitmap(srcfile,pal);
if (!filebmp)
{
allegro_exit();
printf("Error loading %s!\n", srcfile);
exit(1);
}
bmp=create_bitmap_ex(8,320,400);
stretch_blit(filebmp, bmp, 0,0, filebmp->w,filebmp->h, 0,0, 320,400);
destroy_bitmap(filebmp);
//caculate color counter
adject_pallete(bmp,pal);
printf("StartColor:%02X%02X%02X, EndColor:%02X%02X%02X", startcolor.r,startcolor.g,
startcolor.b, endcolor.r,endcolor.g,endcolor.b);
printf("\nNow add color bar...\n");
gen_barcolor(pal);
switch(position)
{
BITMAP *mask_bmp;
case AT_BOTTON:  //Bar at bottom of screen
for (i=0;i<barcolors;i++)
{
rectfill(bmp,bmp->w*i/barcolors,bmp->h-10, (i+1)*bmp->w/barcolors-1,bmp->h-1,
colordirect?256-barcolors+i:255-i);
}
break;
case AT_TOP:  //Bar at top of screen
for (i=0;i<barcolors;i++)
{
rectfill(bmp,i*bmp->w/barcolors,0, (i+1)*bmp->w/barcolors-1,9,
colordirect?256-barcolors+i:255-i);
}
break;
case AT_LEFT:  //Bar at left of screen
for (i=0;i<barcolors;i++)
{
rectfill(bmp, 0, i*bmp->h/barcolors,9, (i+1)*bmp->h/barcolors-1,
colordirect?256-barcolors+i:255-i);
}
break;
case AT_RIGHT:  //Bar at left of screen
for (i=0;i<barcolors;i++)
{
rectfill(bmp,bmp->w-10,i*bmp->h/barcolors, bmp->w-1,(i+1)*bmp->h/barcolors-1,
colordirect?256-barcolors+i:255-i);
}
break;
case AT_MASK:
mask_bmp=create_bitmap_ex(8,320,400);
//rectfill(mask_bmp,0,0,319,399,0);
switch (fillmode)
{
int ix,iy;
case FILL_H:
for (i=0;i<barcolors;i++)
{
int c=colordirect?256-barcolors+i:255-i;
rectfill(mask_bmp,mask_bmp->w*i/barcolors,0, (i+1)*mask_bmp->w/barcolors-1,mask_bmp->
h-1,c);
}
break;
case FILL_V:
for (i=0;i<barcolors;i++)
{
int c=colordirect?256-barcolors+i:255-i;
rectfill(mask_bmp,0,mask_bmp->h*i/barcolors, mask_bmp->w-1,(i+1)*mask_bmp->
h/barcolors-1,c);
}
break;
case FILL_LTRB:
for (i=0;i<barcolors;i++)
{
int ii;
int c=colordirect?256-barcolors+i:255-i;
for (iy=i*(mask_bmp->h+mask_bmp->w)/barcolors;iy<(i+1)*(mask_bmp->h+mask_bmp->
w)/barcolors;iy++)
{
line(mask_bmp,0,iy,iy,0,c);
}
}
break;
case FILL_RTLB:
for (i=0;i<barcolors;i++)
{
int c=colordirect?256-barcolors+i:255-i;
int ii;
for (iy=i*(mask_bmp->h+mask_bmp->w)/barcolors;iy<(i+1)*(mask_bmp->h+mask_bmp->
w)/barcolors;iy++)
{
line(mask_bmp,mask_bmp->w-iy,0,mask_bmp->w,iy,c);
}
}
break;
case FILL_ROTATE:
{
rectfill(mask_bmp,0,0,mask_bmp->w-1,mask_bmp->h-1,255);
for (i=0;i<barcolors;i++)
{
int x1,y1,x2,y2;
int c=colordirect?256-barcolors+i:255-i;
x1=bmp->w/2+bmp->h/2*cos(i*2*PI/barcolors);
y1=bmp->h/2+bmp->h*sin(i*2*PI/barcolors);
x2=bmp->w/2+bmp->h/2*cos((i+1)*2*PI/barcolors);
y2=bmp->h/2+bmp->h*sin((i+1)*2*PI/barcolors);
triangle(mask_bmp,mask_bmp->w/2,mask_bmp->h/2,x1,y1,x2,y2,c);
}
}
break;
case FILL_CIRCLE:
case FILL_RECT:
{
rectfill(mask_bmp,0,0,mask_bmp->w-1,mask_bmp->h-1,255);
for (i=0;i<barcolors;i++)
{
int c=colordirect?255-i:256-barcolors+i;
int r=sqrt(mask_bmp->w*mask_bmp->w+mask_bmp->h*mask_bmp->
h)/2*(barcolors-i)/barcolors;
if (fillmode==FILL_CIRCLE)
ellipsefill(mask_bmp,mask_bmp->w/2,mask_bmp->h/2,r,r,c);
else if (fillmode==FILL_RECT)
rectfill(mask_bmp,mask_bmp->w/2-r,mask_bmp->h/2-r,mask_bmp->w/2+r,mask_bmp->h/2+r,
c);
}
}
break;
} //end switch(fillmode)
draw_sprite(mask_bmp,bmp,0,0);
destroy_bitmap(bmp);
bmp=mask_bmp;
break;
}
//preview
if (!nopreview)
preview(bmp,pal);
//Save to new file: LOGO.SYS
i=save_bmp(tagfile,bmp,pal);
if (i)
{
destroy_bitmap(bmp);
allegro_exit();
printf("Error write to %s\n",tagfile);
exit(2);
}
//Modify used color index
fp=fopen(tagfile,"rb");
i=filelength(fileno(fp));
buf=(unsigned char*) malloc(i);
fread(buf,1,i,fp);
fclose(fp);
buf[0x32]=256-barcolors;
buf[0x33]=motiontype;
fp=fopen(tagfile,"wb");
fwrite(buf,1,i,fp);
fwrite(yisir_info,1,strlen(yisir_info),fp);
fclose(fp);
free(buf);
printf("Success write to %s\n",tagfile);
destroy_bitmap(bmp);
return 0;
}
//Read and do command options
//处理命令行参数
int init_argv(int argc, char* argv[])
{
if (argc==1)
{
printf("%s",cmd_msg);
printf("%s",more_msg);
return -1;
}
else
{
int i;
for (i=1;i<argc;i++)
{
if (argv[0]!=';/'; && argv[0]!=';-';)
{
strcpy(srcfile,argv);
}else
{
char para[256],*p;
strcpy(para,argv);
for (p=para;*p;p++)
*p=toupper(*p);
if (!strncmp(para+1,"TO=",3))
{
strcpy(tagfile,argv+4);
} else if (!strncmp(para+1,"PO=",3))
{
if (!strcmp(para+4,"BOTTON"))
position=AT_BOTTON;
else if (!strcmp(para+4,"TOP"))
position=AT_TOP;
else if (!strcmp(para+4,"LEFT"))
position=AT_LEFT;
else if (!strcmp(para+4,"RIGHT"))
position=AT_RIGHT;
else if (!strncmp(para+4,"MASK",4))
{
position=AT_MASK;
colordirect=(para[8]==';-';?1:0);
fillmode=abs(atoi(para+8));
if (fillmode<=0 || fillmode>FILL_END)
fillmode=FILL_H;
}
} else if (!strncmp(para+1,"BC=",3))
{
barcolors=atoi(para+4);
} else if (!strncmp(para+1,"MT-",3))
{
motiontype=1;
} else if (!strncmp(para+1,"C1=",3))
{
int c=htoi(para+4);
startcolor.r = c>>16 & 0xff;
startcolor.g = c>>8 & 0xff;
startcolor.b = c & 0xff;
} else if (!strncmp(para+1,"C2=",3))
{
int c=htoi(para+4);
endcolor.r = c>>16 & 0xff;
endcolor.g = c>>8 & 0xff;
endcolor.b = c & 0xff;
} else if (!strncmp(para+1,"NP",2))
{
nopreview=1;
}
}
}
if (srcfile[0]==0)
{
printf("Need srcfile! Run again without any option to display the usage.\n");
return -1;
}
return 0;
} //end if(argc==1)
return 0;
}

作者: turboy    时间: 2005-1-26 21:50
标题: 我写的Windows98/DOS7启动动画LOGO制作工具源代码(C语言)
忘了说了,可以在这里看到语法加亮的源文件http://yisir.51.net/arti0039.php
也可以在我的网站http://yisir.9126.com下载到源代码和编译好的文件http://yisir.51.net/tools/logobar.zip
作者: Gandalf    时间: 2005-1-27 09:15
标题: 我写的Windows98/DOS7启动动画LOGO制作工具源代码(C语言)

- 支持楼主的开放、创新的精神!
作者: crshen    时间: 2005-1-27 12:20
标题: 我写的Windows98/DOS7启动动画LOGO制作工具源代码(C语言)
已下载研究
作者: 弄潮儿-NET    时间: 2005-1-27 13:13
标题: 我写的Windows98/DOS7启动动画LOGO制作工具源代码(C语言)
支持楼主,虽然老了一些...如果做个XP/2K3的改LOGO可能更好...

作者: 天风    时间: 2005-1-27 14:40
标题: 我写的Windows98/DOS7启动动画LOGO制作工具源代码(C语言)
支持你的精神和工作
作者: zhenfu    时间: 2005-1-27 16:10
标题: 我写的Windows98/DOS7启动动画LOGO制作工具源代码(C语言)
下面引用由useronce2005/01/27 09:15am 发表的内容:
- 支持楼主的开放、创新的精神!





欢迎光临 无忧启动论坛 (http://bbs.wuyou.net./) Powered by Discuz! X3.3