C语言编写一个简单的绘图软件

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#include"stdio.h"
#include"graphics.h"
#include"stdlib.h"
#include"conio.h"
#include"math.h"
#include"time.h"
#define G 65535


void Draw(void);//定义画图子程序
int Draw2(void);//定义选择颜色子程序
int Cale(int year,int month);//定义日历子程序
int Cqmou(void);//抽签鼠标选择
int Daysmonth(int month,int year);//用于计算该年某月的天数
int Firstday(int month,int year);//用于计算该年某月第一天是星期几
int Leap(int year);//判断给年是否为闰年
int Random(int min,int max);//抽签子程序
int Mou(MOUSEMSG m);//鼠标选择
int Htmou(MOUSEMSG m);//画图鼠标选择
int Ysmou(MOUSEMSG m);//颜色鼠标选择
void Minu(void);//菜单程序
void Htminu(void);//画图菜单程序
void Htminu2(void);//颜色选择菜单子程序
void Back(void);//设置背景颜色子程序
int Hjx(int color);//画矩形子程序
int Hyx(int color);//画圆形子程序
int Hzx(int color);//画直线子程序
int Hqx(int color);//画曲线子程序

//主程序
void main(void)
{
int flag,flag1,flag2,i;
char y[10],c[10];
char a[10],x[10];
initgraph(640,480);//创建一个640*480的窗口
HWND hwnd=GetHWnd();//获取窗口句柄
MOUSEMSG m;//定义鼠标信息
SetWindowText(hwnd,"创建人:陈俊君");//设置窗口标题文字
Back();//设置背景
setcolor(BLUE);//设置字体颜色
setbkmode(TRANSPARENT);//消除文字背景颜色
outtextxy(0,10,"班级:机电131");
outtextxy(270,10,"第三次c语言大作业");
outtextxy(540,10,"学号:13143102");
outtextxy(305,50,"退出");
Minu();//菜单程序
while(true)
{
m=GetMouseMsg();//获取鼠标信息
flag=Mou(m);//鼠标选择
if(flag==1)
{
Draw();//画图子程序
Back();//设置背景
setcolor(BLUE);//设置字体颜色
//setbkmode(TRANSPARENT);//消除文字背景颜色
outtextxy(0,10,"班级:机电131");
outtextxy(270,10,"第三次c语言大作业");
outtextxy(540,10,"学号:13143102");
outtextxy(305,50,"退出");
Minu();//菜单程序
}
//continue;
if(flag==2)
{
flag1=1;
while(flag1!=0)
{
//定义白色背景
for(i=0;i<640;i++)
{
setlinecolor(WHITE);
line(i,0,i,480);
}
InputBox(y,10,"请输入年份");
// 将用户输入的年份转换为数字
int year;
sscanf(y, "%d", &year);
InputBox(c,10,"请输入月份");
//将用户输入的月份转换为数字
int month;
sscanf(c,"%d",&month);
flag1=Cale(year,month);//定义日历子程序
}
Back();//设置背景
setcolor(BLUE);//设置字体颜色
setbkmode(TRANSPARENT);//消除文字背景颜色
outtextxy(0,10,"班级:机电131");
outtextxy(270,10,"第三次c语言大作业");
outtextxy(540,10,"学号:13143102");
outtextxy(305,50,"退出");
Minu();//菜单程序
}
if(flag==3)
{
flag2=1;
while(flag2!=0)
{
//定义白色背景
for(i=0;i<640;

i++)
{
setlinecolor(WHITE);
line(i,0,i,480);
}
InputBox(a,10,"请输入范围最小值");
// 将用户输入的最小值转换为数字
int min;
sscanf(a, "%d", &min);
InputBox(x,10,"请输入最大值");
//将用户输入的最大值转换为数字
int max;
sscanf(x,"%d",&max);
flag2=Random(min,max);//抽签子程序
}
Back();//设置背景
setcolor(BLUE);//设置字体颜色
setbkmode(TRANSPARENT);//消除文字背景颜色
outtextxy(0,10,"班级:机电131");
outtextxy(270,10,"第三次c语言大作业");
outtextxy(540,10,"学号:13143102");
outtextxy(305,50,"退出");
Minu();//菜单程序
}
if(flag==4)
return;
if(flag==5)
continue;
}
}
//设置背景颜色
void Back(void)
{
int x;
//红色
for(x=640;x>480;x--)
{
setlinecolor(RGB(255,0,0));
line(x,0,x,480);
}
//绿色
for(x=480;x>320;x--)
{
setlinecolor(RGB(0,255,0));
line(x,0,x,480);
}
//黄色
for(x=320;x>160;x--)
{
setlinecolor(RGB(255,255,0));
line(x,0,x,480);
}
//紫色
for(x=160;x>0;x--)
{
setlinecolor(RGB(255,0,255));
line(x,0,x,480);
}
}
//菜单程序
void Minu(void)
{
setlinecolor(MAGENTA);
rectangle(300,45,340,70);
rectangle(250,100,426,156);
rectangle(250,200,426,256);
rectangle(250,300,426,356);
setcolor(RED);
setbkmode(TRANSPARENT);
outtextxy(323,120,"画图");
outtextxy(323,220,"日历");
outtextxy(323,320,"抽签");
}
//鼠标选择
int Mou(MOUSEMSG m)
{
//int x,y;
//MOUSEMSG g;
switch(m.uMsg)
{
case WM_LBUTTONDOWN:
//如果鼠标在方框中按下左键
if((m.x>=250)&&(m.x<=426)&&(m.y>=100)&&(m.y<=156))
return 1;
else if((m.x>=250)&&(m.x<=426)&&(m.y>=200)&&(m.y<=256))
return 2;
else if((m.x>=250)&&(m.x<=426)&&(m.y>=300)&&(m.y<=356))
return 3;
else if(m.x>=300&&m.x<=340&&m.y>=45&&m.y<=70)
return 4;
else
break;
}
return 5;
}
//定义画图子程序
void Draw(void)
{
int flag,i;
int color;//定义一个颜色变量
int g;//用于储存画矩形子程序的返回值
Back();//背景设置子程序
Htminu();//画图菜单子程序
MOUSEMSG m;//定义鼠标信息
while(true)
{
m=GetMouseMsg();//获取鼠标信息
flag=Htmou(m);//画图鼠标选择
if(flag==1)//选择画矩形
{
g=0;//给g赋初值
//定义白色背景
for(i=0;i<640;i++)
{
setlinecolor(WHITE);
line(i,0,i,480);
}
while(g!=2)
{
color=Draw2();//定义选择颜色子程序
g=Hjx(color);//画矩形
//flag=Htmou(m);
}
Back();//设置背景菜单
Htminu();//画图菜单子程序
continue;
}
else if(flag==2)//选择画圆
{
g=0;//给g赋初值
//定义白色背景
for(i=0;i<640;i++)
{
setlinecolor(WHITE);
line(i,0,i,480);
}
while(g!=2)
{
color=Draw2();//定义选择颜色子程序
g=Hyx(color);//画圆形

}
Back();//设置背景菜单
Htminu();//画图菜单子程序
continue;
}
else if(flag==3)//选择画线
{
g=0;//给g赋初值
//定义白色背景
for(i=0;i<640;i++)
{
setlinecolor(WHITE);
line(i,0,i,480);
}
while(g!=2)
{
color=Draw2();//定义选择颜色子程序
g=Hzx(color);//画直线
}
Back();//设置背景菜单
Htminu();//画图菜单子程序
continue;
}
else if(flag==4)//选择画曲线
{
g=0;//给g赋初值
//定义白色背景
for(i=0;i<640;i++)
{
setlinecolor(WHITE);
line(i,0,i,480);
}
while(g!=2)
{
color=Draw2();//定义选择颜色子程序
g=Hqx(color);//画曲线
}
Back();//设置背景菜单
Htminu();//画图菜单子程序
continue;
}
else if(flag==5)
{
return;
}
}

}
//定义日历子程序
int Cale(int year,int month)
{
int i,j=80,a,b,k;
char s[10],c[10],d[10];
sprintf(s,"%d",year);//将整形year转换成字符串
sprintf(c,"%d",month);//将整形month转换成字符串
//定义白色背景
for(i=0;i<640;i++)
{
setlinecolor(WHITE);
line(i,0,i,480);
}
b=Daysmonth(month,year);//用于计算该年某月的天数
a=Firstday(month,year);//用于计算该年某月第一天是星期几
outtextxy(307,460,"继续");
outtextxy(285,400,"单机右键退出");
outtextxy(307,0,"日历");
outtextxy(290,20,s);
outtextxy(340,20,c);
outtextxy(25,40,"星期日");
outtextxy(116,40,"星期一");
outtextxy(207,40,"星期二");
outtextxy(298,40,"星期三");
outtextxy(389,40,"星期四");
outtextxy(480,40,"星期五");
outtextxy(571,40,"星期六");
if(a==7)
{
for(i=0;i{
k=i%7;
sprintf(d,"%d",i+1);//将整形日数转换成字符串
outtextxy(25+91*k,j,d);
if((i+1)%7==0)
{
j+=40;
}
}
}
else if(a!=7)
{
for(i=0;i{
sprintf(d,"%d",i+1);//将整形日数转换成字符串
outtextxy(25+91*a,j,d);
a=a+1;
if(a==7)
{
j+=40;
a=0;
}
}
}
MOUSEMSG m;//定义鼠标信息
while(true)
{
m=GetMouseMsg();//获取鼠标信息
switch(m.uMsg)
{
case WM_LBUTTONDOWN:
//当鼠标左键时点中继续按钮
if(m.x>=280&&m.x<=360&&m.y>=440&&m.y<=480)
return 1;
break;
case WM_RBUTTONDOWN:
return 0;
default:
break;
}
}
}
//用于计算该年某月的天数
int Daysmonth(int month,int year)
{
int flag;
flag=Leap(year);//判断给年是否为闰年
if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)
return 31;
if(month==4||month==6||month==9||month==11)
return 30;
if(month==2&&flag==1)
return 29;
else
return 28;
}
//判断给年是否为闰年
int Leap(int year)
{
if((year%4==0&&year%100!=0)||year%400==0)
return 1;
else
return 0;
}
//用于计算该年某月第一天是星期几
int Firstday(int month,int year)
{

int flag;
flag=(1+2*month+3*(month+1)/5+year+year/4+year/400-year/100)%7+1;
return flag;
}
//抽签子程序
int Random(int min,int max)
{
int x,flag,i,g=0;
int N[G];
char s[10];
if(min>=max)
return 1;//如果输入的数不符合则继续输入
//定义白色背景
for(i=0;i<640;i++)
{
setlinecolor(WHITE);
line(i,0,i,480);
}
setcolor(BLACK);
rectangle(280,440,360,480);
outtextxy(300,445,"继续");
for(i=0;i<=(max-min);i++)
{
N[i]=min+i;
}
while(true)
{
//定义白色背景
for(i=0;i<640;i++)
{
setlinecolor(WHITE);
line(i,0,i,480);
}
setcolor(BLACK);
rectangle(280,440,360,480);
outtextxy(300,445,"继续");
srand(time(NULL));//生成一个随机数种子
x=(rand()%(max-min-0+1))+0;//生成一个0到max-min之间的数
if(N[x]>=min&&N[x]<=max)
{
g++;
//定义白色背景
/*for(i=0;i<640;i++)
{
setlinecolor(WHITE);
line(i,0,i,480);
}*/
/*setcolor(BLACK);
rectangle(280,440,360,480);
outtextxy(300,445,"继续");*/
sprintf(s,"%d",N[x]);//将整形N[x]转换成字符串
outtextxy(290,20,s);
N[x]=max+1;
flag=Cqmou();//抽签鼠标选择
if(flag==0)
return 0;
}
if(g==(max-min+1))
return 0;
}
}
//抽签鼠标选择
int Cqmou(void)
{
MOUSEMSG m;//定义鼠标信息
while(true)
{
m=GetMouseMsg();//获取鼠标信息
switch(m.uMsg)
{
case WM_LBUTTONDOWN:
if(m.x>=280&&m.x<=360&&m.y>=440&&m.y<=480)
return 1;
//break;
case WM_RBUTTONDOWN:
return 0;
default:
break;
}
}
}
//画图菜单程序1
void Htminu(void)
{
setbkmode(TRANSPARENT);
setcolor(BLACK);//设置字体颜色
outtextxy(57,66,"画矩形");
outtextxy(225,66,"画圆");
outtextxy(385,66,"画线");
outtextxy(537,66,"画曲线");
outtextxy(305,216,"退出");
setlinecolor(BLACK);//设置方框颜色
rectangle(50,50,110,100);//画矩形
rectangle(210,50,270,100);
rectangle(370,50,430,100);
rectangle(530,50,590,100);
rectangle(290,200,350,250);
}
//画图鼠标选择1
int Htmou(MOUSEMSG m)
{
//m=GetMouseMsg();//获取鼠标信息
switch(m.uMsg)
{
case WM_MOUSEMOVE:
//鼠标移动时不执行命令
break;
case WM_LBUTTONDOWN:
//选中方框时输出相应的flag
if((m.x>=50)&&(m.x<=110)&&(m.y>=50)&&(m.y<=100))//选择画矩形
return 1;
else if((m.x>=210)&&(m.x<=270)&&(m.y>=50)&&(m.y<=100))//选择画圆
return 2;
else if((m.x>=370)&&(m.x<=430)&&(m.y>=50)&&(m.y<=100))//选择画线
return 3;
else if((m.x>=530)&&(m.x<=590)&&(m.y>=50)&&(m.y<=100))//选择画曲线
return 4;
else if((m.x>=290)&&(m.x=350)&&(m.y>=200)&&(m.y<=250))//选择退出
return 5;
else
return 6;
}
return 6;
}
//定义选择颜色子程序
int Draw2(void)
{
int flag;//i;
Htminu2();//颜色选择菜单子程序
MOUSEMSG m;//定义鼠标变量
while(true)
{
m=GetMouseMsg();//获取鼠标信


flag=Ysmou(m);//颜色鼠标选择
if(flag==1)
{
return BLUE;
}
else if(flag==2)
{
return GREEN;
}
else if(flag==3)
{
return RED;
}
else if(flag==5)
return 2;
else if(flag==4)
continue;
}
}
//颜色选择菜单子程序
void Htminu2(void)
{
setbkmode(TRANSPARENT);
setcolor(BLACK);//设置字体颜色
outtextxy(92,43,"蓝色");
outtextxy(306,43,"绿色");
outtextxy(519,43,"红色");
outtextxy(280,460,"按右键退出");
setlinecolor(BLACK);//设置方框颜色
rectangle(82,40,132,60);
rectangle(296,40,346,60);
rectangle(509,40,559,60);
}
//颜色鼠标选择
int Ysmou(MOUSEMSG m)
{
switch(m.uMsg)
{
//鼠标移动时不执行命令
case WM_MOUSEMOVE:
break;
//鼠标左键按下
case WM_LBUTTONDOWN:
if(m.x<=132&&m.x>=82&&m.y>=40&&m.y<=60)
return 1;
else if(m.x>=296&&m.x<=346&&m.y>=40&&m.y<=60)
return 2;
else if(m.x>=509&&m.x<=559&&m.y>=40&&m.y<=60)
return 3;
else
return 4;
case WM_RBUTTONDOWN:
return 5;
}
return 4;
}
//画矩形子程序
int Hjx(int color)
{
int x1,y1,x2,y2;//用于储存矩形左上角与右下角
int flag=-1,i=0;//用于计算左键点击的次数
MOUSEMSG m;//定义鼠标信息
if(color==2)
{
return 2;
}
while(i<2)
{
m=GetMouseMsg();//获取鼠标信息
switch(m.uMsg)
{
case WM_LBUTTONDOWN:
flag=-flag;
if(flag==1)
{
x1=m.x;
y1=m.y;
i++;
}
else if(flag==-1)
{
x2=m.x;
y2=m.y;
i++;
}
break;
default:
break;
}
}
setcolor(color);
rectangle(x1,y1,x2,y2);
return 1;
}
//画圆形子程序
int Hyx(int color)
{
int x1,y1,x2,y2;//用于储存圆形中心与圆弧点
int flag=-1,i=0;
MOUSEMSG m;//定义鼠标信息
if(color==2)
{
return 2;
}
while(i<2)
{
m=GetMouseMsg();//获取鼠标信息
switch(m.uMsg)
{
case WM_LBUTTONDOWN:
flag=-flag;
if(flag==1)
{
x1=m.x;
y1=m.y;
i++;
}
else if(flag==-1)
{
x2=m.x;
y2=m.y;
i++;
}
break;
default:
break;
}
}
setcolor(color);
circle(x1,y1,(double)(sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2))));
return 0;
}
//画直线子程序
int Hzx(int color)
{
int x1,y1,x2,y2;//用于储存直线的端点坐标
int flag=-1,i=0;
MOUSEMSG m;//定义鼠标信息
if(color==2)
{
return 2;
}
while(i<2)
{
m=GetMouseMsg();//获取鼠标信息
switch(m.uMsg)
{
case WM_LBUTTONDOWN:
flag=-flag;
if(flag==1)
{
x1=m.x;
y1=m.y;
i++;
}
else if(flag==-1)
{
x2=m.x;
y2=m.y;
i++;
}
break;
default:
break;
}
}
setcolor(color);
line(x1,y1,x2,y2);//划线
return 0;
}
//画曲线子程序
int Hqx(int color)
{
//int x1,y1,x2,y2;//用于储存直线的端点坐标
int flag=-1,i=0;
MOUSEMSG m;//定义鼠标信息
if(color==2)
{
return 2;
}
while(i<2)
{

m=GetMouseMsg();//获取鼠标信息
switch(m.uMsg)
{
case WM_LBUTTONDOWN:
flag=-flag;
if(flag==1)
{
i++;
while(i<2)
{
m=GetMouseMsg();//获取鼠标信息
switch(m.uMsg)
{
case WM_MOUSEMOVE:
putpixel(m.x,m.y,color);
break;
case WM_LBUTTONDOWN:
flag=-flag;
if(flag==-1)
i++;
break;
default:
break;
}
}
}
break;
default:
break;
}
}
return 0;
}

相关文档
最新文档