赞
踩
此图形库是针对C++的图形库,可以帮助初学者制作简单的图形以及游戏编程。本人也是一名语言的初学者,目的想记录学习的历程以及基本使用方法。
下载和安装在此不作说明,本文是以使用手册为基准,对函数的一些使用和注意事项进行说明。
基本上都是以画一个⚪为例。
#include <graphics.h> // 引用图形库头文件
#include <conio.h>
int main()
{
initgraph(640, 480); // 创建绘图窗口,大小为 640x480 像素(单位是像素)
circle(200, 200, 100); // 画圆,圆心(200, 200),半径 100
_getch(); // 按任意键继续目的是让窗体停下来
closegraph(); // 关闭绘图窗口
return 0;
}
好了这就是我们第一个代码。
#include<graphics.h>
int main()
{
initgraph(640, 480);创建窗口大小
system("pause");//另一种使窗口停住的方法
closegraph();//关闭窗口
return 0;
}
然后我们右击函数名转到定义
HWND initgraph(int width, int height, int flag = NULL); // 初始化图形环境
void closegraph(); // 关闭图形环境
可以看见这个,initgraph()函数还有一个参数也可以不写。
打开手册可以发现:
创建窗口时还可以同时设置并且用 | 间隔可以同时设置,具体看代码
#include<graphics.h>
#include<conio.h>
#include<
int main()
{
//initgraph(640, 480,EW_SHOWCONSOLE);//在创建窗口时显示控制台
initgraph(640, 480, EW_SHOWCONSOLE | EW_NOCLOSE | EW_NOMINIMIZE);//在显示控制台同时禁止关闭和最小化
_getch();
closegraph();//关闭窗口
return 0;
}
#include<graphics.h>
#include<conio.h>
int main()
{
initgraph(640, 480);
setbkcolor(RED);//设置背景为红色
cleardevice();//用背景色清空屏幕
_getch();
closegraph();//关闭窗口
return 0;
}
设置背景时还需要使用cleardevise()函数当前背景色清空绘图设备,这样才能设置。注意先后顺序,一般设置颜色要放在操作之前。
颜色的表示:一般有颜色常量,16进制数字,RGB宏
#include<graphics.h>
#include<conio.h>
int main()
{
initgraph(640, 480);
setbkcolor(RED);//设置背景为红色
cleardevice();//用背景色清空屏幕
//setfillcolor(WHITE);//设置当前设备填充颜色白色
//setfillcolor(RGB(200, 200, 200));//RGB宏大小0~255
setfillcolor(0xAAAAAA);
solidcircle(40, 40, 30);//白色无边框有填充的圆
_getch();
closegraph();//关闭窗口
return 0;
}
无边框无填充circle();
有边框有填充fillcircle();
无边框有填充solidcircle();
前两个参数是坐标 后一个是半径大小*
#include<graphics.h> #include<conio.h> int main() { initgraph(640, 480); setbkcolor(WHITE);//设置背景为白色 cleardevice();//用背景色清空屏幕 setlinecolor(BLACK); circle(40, 50, 30);//无边框无填充的圆 setfillcolor(RED);//填充颜色红色 setlinestyle(PS_SOLID , 4);//边框是线宽度4个像素 线的样式为实线 setlinecolor(BLUE);//边框的颜色是蓝色 fillcircle(100, 100, 30);//有边框的填充圆 solidcircle(100, 200, 30);//无边框的填充圆 _getch(); closegraph();//关闭窗口 return 0; }
#include<graphics.h> #include<conio.h> int main() { initgraph(640, 480); setbkcolor(WHITE);//设置背景为白色 cleardevice();//用背景色清空屏幕 setfillcolor(RED);//填充颜色红色 setlinestyle(PS_SOLID , 40);//边框是线 线的样式为实线 setlinecolor(BLUE);//边框的颜色是蓝色 fillcircle(100, 100, 30);//有边框的填充圆 clearcircle(100, 100, 20);//清空圆形区域(100,100)圆心半径20 _getch(); closegraph();//关闭窗口 return 0; }
注意:该函数使用背景色清空圆形区域。
画图就是画线可以通过设置线的函数来设置图形边框
无填充矩形rectangle();
无边框的填充矩形solidrectangle();
有边框的填充矩形fillrectangle();
#include<graphics.h> #include<conio.h> int main() { initgraph(640, 480); setbkcolor(WHITE);//设置背景为白色 cleardevice();//用背景色清空屏幕 setfillcolor(RED);//填充颜色红色 setlinestyle(PS_SOLID , 4);//边框是线 线的样式为实线 setlinecolor(BLUE);//边框的颜色是蓝色 rectangle(20, 20, 40, 70);//起点(20,20)终点(40,70)的矩形无填充 setfillcolor(RED); fillrectangle(60, 20, 80, 70);//有边框的填充矩形 solidrectangle(100, 20, 120, 70);//无边框的填充矩形 _getch(); closegraph();//关闭窗口 return 0; }
用法同上简单示例:
#include<graphics.h> #include<conio.h> int main() { initgraph(640, 480); setbkcolor(WHITE);//设置背景为白色 cleardevice();//用背景色清空屏幕 setlinecolor(GREEN);//边框的颜色是绿色 setfillcolor(RED); fillrectangle(60, 20, 80, 70);//有边框的填充矩形 clearrectangle(65, 30, 80, 50);//清空矩形区域 坐标用法一样 _getch(); closegraph();//关闭窗口 return 0; }
无填充的椭圆ellipse()
有边框有填充椭圆fillellipse()
无边框有填充椭圆solidellipse()
#include<graphics.h> #include<conio.h> int main() { initgraph(640, 480); setbkcolor(WHITE);//设置背景为白色 cleardevice();//用背景色清空屏幕 setlinecolor(GREEN);//边框的颜色是绿色 setfillcolor(RED); ellipse(50, 50, 80,150);//椭圆外切圆矩形坐标 无填充 fillellipse(110, 50, 140, 150);//有边框有填充椭圆 solidellipse(170, 50, 200, 150);//无边框有填充 _getch(); closegraph();//关闭窗口 return 0; }
用法一样:
#include<graphics.h>
#include<conio.h>
int main()
{
initgraph(640, 480);
setbkcolor(WHITE);//设置背景为白色
cleardevice();//用背景色清空屏幕
setlinecolor(GREEN);//边框的颜色是绿色
setfillcolor(RED);
fillellipse(110, 50, 140, 150);//有边框有填充椭圆
clearellipse(110, 75, 140, 125);//清空椭圆区域
_getch();
closegraph();//关闭窗口
return 0;
}
无填充扇形pie()
有边框有填充扇形fillpie()
无边框填充扇形solidpie()
#include<graphics.h> #include<conio.h> int main() { initgraph(640, 480); setbkcolor(WHITE);//设置背景为白色 cleardevice();//用背景色清空屏幕 setlinecolor(GREEN);//边框的颜色是绿色 setfillcolor(RED); pie(40, 40, 80, 100, 1, 1.5);//无填充扇形 fillpie(100, 40, 140, 100, 1, 1.5);//有边框有填充扇形 solidpie(160, 40, 200, 100, 1, 1.5);//无边框有填充扇形 _getch(); closegraph();//关闭窗口 return 0; }
扇形有六个参数,前面四个是以椭圆外切矩形的顶点,后面是起终角的弧度(double),以矩形中心点做水平垂直线,水平右侧->0弧度,垂直向上即水平右侧逆时针方向->1.57弧度(90度),画的扇形也是以矩形中点为心
同上:
#include<graphics.h> #include<conio.h> int main() { initgraph(640, 480); setbkcolor(WHITE);//设置背景为白色 cleardevice();//用背景色清空屏幕 setlinecolor(GREEN);//边框的颜色是绿色 setlinestyle(PS_SOLID,6); setfillcolor(RED); fillpie(40, 40, 140, 140, 0, 3.14);//有边框有填充扇形 clearpie(40, 40, 140, 140, 0.78, 2.35);//清空扇形区域 _getch(); closegraph();//关闭窗口 return 0; }
椭圆弧参数和扇形相似,使用方法同上
#include<graphics.h>
#include<conio.h>
int main()
{
initgraph(640, 480);
setbkcolor(WHITE);//设置背景为白色
cleardevice();//用背景色清空屏幕
setlinecolor(GREEN);//边框的颜色是绿色
arc(40, 40, 80, 100, 4.01, 5.41);//画一个椭圆弧
_getch();
closegraph();//关闭窗口
return 0;
}
无填充多边形polygon()
有边框有填充的fillpolygon()
无边框有填充的solidpolygon()
#include<graphics.h> #include<conio.h> int main() { initgraph(640, 480); setbkcolor(WHITE);//设置背景为白色 cleardevice();//用背景色清空屏幕 setlinecolor(GREEN);//边框的颜色是绿色 int san[] = { 20,20,10,40,30,40 }; int san1[] = { 50,20,40,40,60,40 }; int san2[] = { 80,20,70,40,90,40 }; setfillcolor(RED);//设置颜色 fillpolygon((POINT*)san1, 3);//有边框有填充的三角形 solidpolygon((POINT*)san2, 3);//无边框有填充的三角形 polygon((POINT *) san, 3);//无填充的三角形 _getch(); closegraph();//关闭窗口 return 0; }
参数两个,坐标和顶点个数
另一种坐标表示:
POINT pts[] = { {50, 200}, {200, 200}, {200, 50} };
polygon(pts, 3);
见代码:
#include<graphics.h> #include<conio.h> int main() { initgraph(640, 480); setbkcolor(WHITE);//设置背景为白色 cleardevice();//用背景色清空屏幕 int san[] = { 80,5,10,100,100,100 }; int san1[] = { 80,30,70,40,60,80,40,90 }; setfillcolor(RED);//设置颜色 setlinecolor(GREEN);//边框的颜色是绿色 fillpolygon((POINT*)san, 3);//有边框有填充的三角形 clearpolygon((POINT*)san1, 4);//清空不规则四边形 _getch(); closegraph();//关闭窗口 return 0; }
无填充圆角矩形roundrect()
有边框有填充圆角矩形fillroundrect()
无边框有填充圆角矩形solidroundrect()
#include<graphics.h> #include<conio.h> int main() { initgraph(640, 480); setbkcolor(WHITE);//设置背景为白色 cleardevice();//用背景色清空屏幕 setlinecolor(GREEN);//边框的颜色是绿色 setfillcolor(RED); roundrect(40, 40, 140, 100, 60, 60);//无边框无填充矩形 fillroundrect(40, 120, 140, 180, 60, 60);//有边框有填充矩形 solidroundrect(40, 200, 140, 260, 60, 60);//无边框有填充 _getch(); closegraph();//关闭窗口 return 0; }
六个参数,前四个坐标----后两个为构成圆角矩形的圆角的椭圆的宽度和高度
上代码:
#include<graphics.h>
#include<conio.h>
int main()
{
initgraph(640, 480);
setbkcolor(WHITE);//设置背景为白色
cleardevice();//用背景色清空屏幕
setlinecolor(GREEN);//边框的颜色是绿色
setfillcolor(RED);
fillroundrect(40, 40, 100, 120, 60, 60);//有边框有填充矩形
clearroundrect(60, 50, 80, 80, 20, 20);//清除圆角矩形区域
_getch();
closegraph();//关闭窗口
return 0;
}
线line() 点putpixel() 多线ployline()
#include<graphics.h> #include<conio.h> int main() { initgraph(640, 480); setbkcolor(WHITE);//设置背景为白色 cleardevice();//用背景色清空屏幕 int xian[] = { 50,50,70,60,150,60,40,90 }; setlinecolor(BLACK); line(20, 20, 100, 200);//画直线起终点坐标 putpixel(130, 40, RED);//画点 polyline((POINT*)xian, 4);//画多条线 _getch(); closegraph();//关闭窗口 return 0; }
画多条线的方法和画多边形的差不多。。。嗯
设置字体颜色settextcolor()使用方法同上
#include<graphics.h>
#include<conio.h>
int main()
{
initgraph(640, 480);
char str[] = "你好";
outtextxy(30, 50, str);
outtextxy(50, 10, "你好");
outtextxy(80, 80, "4");
_getch();
closegraph();//关闭窗口
return 0;
}
改成多字节字符集就行了(右击项目名>属性>字符集)
文字的居中输出:
要获取字符串的实际占用像素高度和宽度
#include<graphics.h> #include<conio.h> int main() { initgraph(640, 480); setbkcolor(WHITE); cleardevice(); setlinecolor(BLACK); rectangle(50, 50, 200, 150);//画一个矩形文字居中输出 char txt[] = "你好"; int tw = textwidth(txt);//获取字符串宽度 int th = textheight(txt);//获取字符串高度 settextcolor(BLACK); outtextxy(50 + (150 - tw) / 2, 50 + (100 - th) / 2, txt);//计算出居中位置 _getch(); closegraph();//关闭窗口 return 0; }
最简单的就是三个参数的使用:高度,字符的平均宽度(为0的话则比例自适应),字体名称
#include<graphics.h>
#include<conio.h>
int main()
{
initgraph(640, 480);
settextstyle(106,0 ,"楷体");
outtextxy(20, 20,"你好");
_getch();
closegraph();//关闭窗口
return 0;
}
此函数的其他用法详见使用手册
有五个参数(保存图像的IMAGE指针,获取图像区域的左上角坐标,获取图像区域的宽度和高度)
当前设备上绘制指定图像putimage()
绘制位置坐标,和IMAGE指针及相关参数
#include<graphics.h> #include<conio.h> int main() { initgraph(640, 480); setbkcolor(WHITE); cleardevice(); setlinecolor(BLACK); circle(30, 30, 20); IMAGE img; getimage(&img, 0, 0, 60, 60); putimage(100, 100, &img); _getch(); closegraph();//关闭窗口 return 0; }
用于从文件中读取图像loadimage()
位置可以是相对路径也可以是绝对路径
#include<graphics.h>
#include<conio.h>
int main()
{
initgraph(640, 480);
IMAGE img;//保存图像的 IMAGE 对象指针
//loadimage(NULL, "C:\\Users\\Desktop\\图片\\图\\1.jpg",640,480);//NULL在窗口输出 和窗口一样大
loadimage(&img, "C:\\Users\\Desktop\\图片\\图\\1.jpg");//&img
putimage(10, 10, &img);//在指定位置输出
_getch();
closegraph();//关闭窗口
return 0;
}
在输出图片时,还可以位运算操作
putimage(10, 10, &img);比如把彩色箭头留下,需要他图片的掩码图,利用位运算 | SRCPAINT,& SRCAND
putimage(10, 10, &img,SRCPAINT)
putimage(10, 10, &img,SRCAND)
图片大小保持一致
使窗口适应图片大小:
IMAGE是一个图形对象
img.getwidth();
返回 IMAGE 对象的宽度
img.getheight();
返回 IMAGE 对象的高度
#include<graphics.h>
#include<conio.h>
int main()
{
IMAGE img;
loadimage(&img, "C:\\Users\\Desktop\\图片\\图\\1.jpg");//&img
int pt = img.getwidth();//求图片的宽度
int ph = img.getheight();//求图片高度
initgraph(pt, ph);//设置窗口大小
putimage(0,0, &img);//在指定位置输出
_getch();
closegraph();//关闭窗口
return 0;
}
注意路径
#include<graphics.h>
#include<conio.h>
int main()
{
initgraph(640, 480);
circle(40, 40, 20);
saveimage("C:\\Users\\Desktop\\图片\\图\\2.jpg");//保存绘图内容
_getch();
closegraph();//关闭窗口
return 0;
}
ExMessage这个结构体用于保存消息
定义一个变量m
m.x,m.y鼠标当前坐标
m.message m的消息
m.vkcode m的按键的虚拟键码
getmssage()用于获取一个消息
#include <graphics.h> #include<conio.h> int main() { initgraph(300, 300); ExMessage m;//定义消息变量 setfillcolor(RED); while (true) { m = getmessage(EM_MOUSE | EM_KEY);//获取一个鼠标或者按键消息 switch (m.message) { case WM_MOUSEMOVE://鼠标移动时画一个绿色的点 putpixel(m.x, m.y, GREEN); break; case WM_LBUTTONDOWN://鼠标左键点击画一个小矩形 fillrectangle(m.x - 10, m.y - 10, m.x + 10, m.y + 10); break; case WM_RBUTTONDOWN://鼠标右键点击一个大矩形 fillrectangle(m.x - 20, m.y - 20, m.x + 20, m.y + 20); break; case WM_KEYDOWN://按下esc键退出 if (m.vkcode == VK_ESCAPE); return 0; } } _getch(); closegraph(); return 0; }
输出随机颜色背景
#include <graphics.h> #include<conio.h> #include<ctime> int main() { initgraph(640, 480); srand((unsigned)time(NULL)); //设置随机种子 while (true) { setbkcolor(RGB(rand() % 256, rand() % 256, rand() % 256));//设置背景随机颜色 cleardevice(); Sleep(500);//休眠500毫秒 } _getch(); closegraph(); return 0; }
设置文字随机颜色
#include <graphics.h> #include<conio.h> #include<ctime> int main() { initgraph(640, 480); srand((unsigned)time(NULL)); //设置随机种子 while (!_kbhit())//当没有按键按下时 { settextcolor(RGB(rand() % 256, rand() % 256, rand() % 256));//设置文字随机颜色 outtextxy(30, 100, "你好"); Sleep(500);//休眠500毫秒 } _getch(); closegraph(); return 0; }
设置随机数方法
srand((unsigned)time(NULL));
rand();
当rand()%一个数字时—随机数取值为0~这个数字-1
播放音乐
#include <graphics.h> #include<conio.h> #include<mmsystem.h>//包含多媒体设备接口头文件 #pragma comment(lib,"winmm.lib")//加载静态库 int main() { initgraph(640, 480); setbkcolor(YELLOW); cleardevice(); //alias 名字就是给文件起了一个别名 方便用 mciSendString("open D:\\编程\\音频\\bgm.mp3 alias BGM ",0,0,0); mciSendString("play BGM repeat", 0, 0, 0);//repeat 重复播放 Sleep(10000); mciSendString("close BGM", 0, 0, 0); //关闭音乐 _getch(); closegraph(); return 0; }
文件可以相对路径和绝对路径
alias 取别名下面操作方便
小球移动
#include <graphics.h> #include<conio.h> int main() { int x = 20, y = 20;//小球初始化坐标 initgraph(640, 480); setbkcolor(WHITE); cleardevice(); setfillcolor(RED);//小球颜色 while (true) { BeginBatchDraw(); fillcircle(x, y, 20); EndBatchDraw(); if (GetAsyncKeyState(0x57)) { y -= 5; Sleep(1); } if (GetAsyncKeyState(0x53)) { y += 5; Sleep(1); } if (GetAsyncKeyState(0x41)) { x -= 5; Sleep(1); } if (GetAsyncKeyState(0x44)) { x += 5; Sleep(1); } cleardevice(); } _getch(); closegraph(); return 0; }
只是实现了最基本的移动,GetAsyncKeyState()函数参数是虚拟键码,加上if语句可以判断是否有键盘操作,图形的参数是变量可实现运动的效果
MessageBox()弹出模式对话框
修改窗口名称
// 获得窗口句柄
HWND hWnd = GetHWnd();
// 使用 Windows API 修改窗口名称
SetWindowText(hWnd, "Hello!");
终于写完了,只是说明了一些简单函数的使用,想着写的细一些当个笔记用一用,网上也有很多用这个图形库写游戏的例子大家可以借鉴一下,如有错误请及时指出,欢迎交流!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。