easyx--上半部分
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<iostream>
#include<bits/stdc++.h>
using namespace std;
//只能在c++上运行(文件为.cpp)
#include<easyx.h>//这个只包含最新的API(函数)
#include<graphics.h>//这个头文件包含了<easyx.h>,还包含了已经不推荐使用了的函数
//定义消息结构体变量
ExMessage msg = { 0 };
//绘制图形
void drawShape() {//更多可看easys文档或右击任意一个函数->转到定义
//绘制一个点
putpixel(50, 50, RGB(251, 249, 245));
//设置线条颜色
setlinecolor(RED);
//设置线条样式
setlinestyle(PS_SOLID, 3);//样式,宽度
//绘制一条线//起点(x1,y1)->终点(x2,y2)
line(0, 0, 666, 666);
//line(0, 0, getwidth(), getheight());getwidth(), getheight() 获取窗口宽度,高度
//绘制一个正矩形//左上角(x1,y1)->右下角(x2,y2)
rectangle(50, 50, 100, 100);//无填充矩形
//设置填充颜色
setfillcolor(RGB(196, 151, 141));//在之前设置//会影响后面所有,要改变则在后面绘制时重设
fillrectangle(50, 100, 100, 150);//填充矩形
solidrectangle(50, 160, 100, 210);//无边框填充矩形
//绘制一个圆角矩形左上角(x1,y1)->右下角(x2,y2)+圆角(椭圆)的高度,宽度
roundrect(110, 110, 160, 160, 5, 6);//无填充 //fillroundrect填充 //solidroundrect无边框填充
//绘制一个圆形//圆心(x,y)+半径(r)
circle(150, 150, 30);//无填充 //fillcircle填充 //solidcircle无边框填充
//绘制一个椭圆//将其放在矩形中的左上角(x1,y1)->右下角(x2,y2)
ellipse(150, 180, 200, 210);//无填充 //fillellipse填充 //solidellipse无边框填充
//绘制折线
POINT points[] = { {0,0},{50,50},{666,666},{333,333} };
polyline(points, 4);//points,几个点
}
//绘制文字
void drawText() {
//设置文字大小//高度,宽度,字体名称
//error:“settextstyle”: 没有重载函数可以转换所有参数类型:1.在字符串前面加大写的L;2:用TEXT()/_T把字符串包起来3:项目->属性->配置属性->常规(高级)->字符集->多字节
settextstyle(38,0,"微软雅黑");
//设置文字颜色
settextcolor(GREEN);
//设置背景模式(防止覆盖背景图形)
setbkmode(TRANSPARENT);
//绘制文字
outtextxy(333, 333, "神经病");
//整形的数输出
int score = 666;
char a[50];
sprintf(a, "%d", score);
outtextxy(0, 555, a);
}
//文字居中
void centerText() {
int x = 30, y = 380, h = 60, w = 200;
//绘制矩形
setfillcolor(YELLOW);
fillrectangle(x, y, x + w, y + h);
//绘制文字
settextcolor(WHITE);
int hspace = (w - textwidth("I LOVE YOU")) / 2;//宽度,textwidth求文字宽度
int vspace = (h - textheight("I LOVE YOU")) / 2;//高度,textheight求文字高度
outtextxy(x + hspace, y+vspace, "I LOVE YOU");
}
//消息处理
void MESSage() {
//定义消息结构体变量
//ExMessage msg = { 0 };//全局变量
while (true) {//不断获取消息
//获取消息
if (peekmessage(&msg, EX_MOUSE)) {//bool型
switch (msg.message) {
case WM_LBUTTONDOWN: //左键按下
printf("左键按下pos(%d,%d)\n", msg.x, msg.y);//点击坐标
break;
case WM_NCRBUTTONDOWN: //右键按下
break;
case WM_MBUTTONDOWN: //中键按下
break;
case WM_MOUSEWHEEL: //滚轮按下
printf("滚轮滚动 dir(%d)\n", msg.wheel);//正数->(向上)像屏幕滚动,负数->(向下)向自己滚动
break;
case WM_LBUTTONDBLCLK: //左键双击//双击需要在打开窗口时加上EX_DBLCLKS
break;
case WM_MOUSEMOVE: //鼠标移动
break;
}
}
}
}
/漂亮的按键+按键消息(上下左右)
//mx,my是否在指定的矩形区域
bool inArea(int mx, int my, int x, int y, int w, int h) {
if (mx > x && mx<x + w && my>y && my < y + h) {
return true;
}
return false;
}
bool button(int x, int y, int w, int h, const char* text) {
//绘制按钮颜色
if(inArea(msg.x, msg.y, x, y, w, h)) {
setfillcolor(RGB(195, 153, 137));
}
else {
setfillcolor(RGB(250, 250, 250));
}
//绘制按钮
fillroundrect(x, y, x + w, y + h, 5, 5);
//绘制按钮文本
int hspace = (w - textwidth(text)) / 2;
int vspace = (h - textheight(text)) / 2;
settextcolor(BLACK);
outtextxy(x + hspace, y + vspace, text);
//判断按钮是否被点击
if (msg.message == WM_LBUTTONDOWN && inArea(msg.x, msg.y, x, y, w, h)) {
return true;
}
return false;
}
void buttlefull() {
//设置背景模式
setbkmode(TRANSPARENT);
//定义小球的属性
int x = 50, y = 50, r = 50, speep = 3, vx = 0, vy = 0;
while (true) {
//获取消息
if (peekmessage(&msg, EX_MOUSE|EX_KEY)) {
}
//双缓冲绘图:防止绘图时文字一闪一闪//所有的绘图代码必须放在begin和end之间
//判断按键消息//可放在双缓冲绘图外面
if (msg.message == WM_KEYDOWN) {
printf("keydown\n");
//具体判断是哪个键按下
switch (msg.vkcode) {//虚拟键值
case VK_UP:
printf("上键按下\n");
vy = -1;
break;
case VK_DOWN:
printf("下键按下\n");
vy = 1;
break;
case VK_LEFT:
printf("左键按下\n");
vx = -1;
break;
case VK_RIGHT:
printf("右键按下\n");
vx = 1;
break;
case VK_SPACE:
printf("空格\n");
break;
case 'A'://对字符键,字符‘’里面大写
break;
}
}
else if (msg.message == WM_KEYUP) {
printf("keyup\n");
switch (msg.vkcode) {//虚拟键值
case VK_UP:
printf("上键按下\n");
vy = 0;
break;
case VK_DOWN:
printf("下键按下\n");
vy = 0;
break;
case VK_LEFT:
printf("左键按下\n");
vx = 0;
break;
case VK_RIGHT:
printf("右键按下\n");
vx = 0;
break;
case VK_SPACE:
printf("空格\n");
break;
case 'A'://对字符键,字符‘’里面大写
break;
}
}
BeginBatchDraw();
cleardevice();//清屏
if (button(20, 20, 150, 35, "My friend!")) {
printf("YES!\n");
}
if (button(200, 20, 150, 35, " NO my friend!")) {
printf("OOOOOO!\n");
}
//绘制小球
setfillcolor(RGB(138, 27, 255));
solidcircle(x, y, r);
x += speed * vx;
y += speed * vy;
EndBatchDraw();
Sleep(10);//使程序延迟十秒
outtextxy(0, 0, "NONONONONONO");//若不放在里面会一闪一闪(看不见)
//把消息类型设置为0
msg.message = 0;
}
}
int main(){
//创建一个图形窗口 宽度*高度
//都使用用‘|’
initgraph(666, 666,EX_SHOWCONSOLE|EX_NOMINIMIZE| EX_DBLCLKS);// EX_SHOWCONSOLE 为了显示控制台---可加可不加---不加的话控制台不显示//EX_NOCLOSE---无关闭按钮//EX_NOMINIMIZE---取消最小化按钮
//设置窗口的背景颜色
setbkcolor(RGB(20,134,21));//直接显示三原色的值
//setbkcolor(WHITE);//或直接输入颜色
//(清除之前颜色)用设置的颜色填充整个窗口
cleardevice();
//窗口的坐标体系:窗口左上角(不含标题栏)是坐标原点,x轴向右增大,y轴向下增大
//绘制图形
//drawShape();
//绘制文字
//drawText();
//文字居中
//centerText();
//获取消息
//MESSage();
/漂亮按键
buttlefull();
getchar();//防止程序退出
return 0;
}
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<iostream>
#include<bits/stdc++.h>
using namespace std;
//只能在c++上运行(文件为.cpp)
#include<easyx.h>//这个只包含最新的API(函数)
#include<graphics.h>//这个头文件包含了<easyx.h>,还包含了已经不推荐使用了的函数
//定义消息结构体变量
ExMessage msg = { 0 };
//绘制图形
void drawShape() {//更多可看easys文档或右击任意一个函数->转到定义
//绘制一个点
putpixel(50, 50, RGB(251, 249, 245));
//设置线条颜色
setlinecolor(RED);
//设置线条样式
setlinestyle(PS_SOLID, 3);//样式,宽度
//绘制一条线//起点(x1,y1)->终点(x2,y2)
line(0, 0, 666, 666);
//line(0, 0, getwidth(), getheight());getwidth(), getheight() 获取窗口宽度,高度
//绘制一个正矩形//左上角(x1,y1)->右下角(x2,y2)
rectangle(50, 50, 100, 100);//无填充矩形
//设置填充颜色
setfillcolor(RGB(196, 151, 141));//在之前设置//会影响后面所有,要改变则在后面绘制时重设
fillrectangle(50, 100, 100, 150);//填充矩形
solidrectangle(50, 160, 100, 210);//无边框填充矩形
//绘制一个圆角矩形左上角(x1,y1)->右下角(x2,y2)+圆角(椭圆)的高度,宽度
roundrect(110, 110, 160, 160, 5, 6);//无填充 //fillroundrect填充 //solidroundrect无边框填充
//绘制一个圆形//圆心(x,y)+半径(r)
circle(150, 150, 30);//无填充 //fillcircle填充 //solidcircle无边框填充
//绘制一个椭圆//将其放在矩形中的左上角(x1,y1)->右下角(x2,y2)
ellipse(150, 180, 200, 210);//无填充 //fillellipse填充 //solidellipse无边框填充
//绘制折线
POINT points[] = { {0,0},{50,50},{666,666},{333,333} };
polyline(points, 4);//points,几个点
}
//绘制文字
void drawText() {
//设置文字大小//高度,宽度,字体名称
//error:“settextstyle”: 没有重载函数可以转换所有参数类型:1.在字符串前面加大写的L;2:用TEXT()/_T把字符串包起来3:项目->属性->配置属性->常规(高级)->字符集->多字节
settextstyle(38,0,"微软雅黑");
//设置文字颜色
settextcolor(GREEN);
//设置背景模式(防止覆盖背景图形)
setbkmode(TRANSPARENT);
//绘制文字
outtextxy(333, 333, "神经病");
//整形的数输出
int score = 666;
char a[50];
sprintf(a, "%d", score);
outtextxy(0, 555, a);
}
//文字居中
void centerText() {
int x = 30, y = 380, h = 60, w = 200;
//绘制矩形
setfillcolor(YELLOW);
fillrectangle(x, y, x + w, y + h);
//绘制文字
settextcolor(WHITE);
int hspace = (w - textwidth("I LOVE YOU")) / 2;//宽度,textwidth求文字宽度
int vspace = (h - textheight("I LOVE YOU")) / 2;//高度,textheight求文字高度
outtextxy(x + hspace, y+vspace, "I LOVE YOU");
}
//消息处理
void MESSage() {
//定义消息结构体变量
//ExMessage msg = { 0 };//全局变量
while (true) {//不断获取消息
//获取消息
if (peekmessage(&msg, EX_MOUSE)) {//bool型
switch (msg.message) {
case WM_LBUTTONDOWN: //左键按下
printf("左键按下pos(%d,%d)\n", msg.x, msg.y);//点击坐标
break;
case WM_NCRBUTTONDOWN: //右键按下
break;
case WM_MBUTTONDOWN: //中键按下
break;
case WM_MOUSEWHEEL: //滚轮按下
printf("滚轮滚动 dir(%d)\n", msg.wheel);//正数->(向上)像屏幕滚动,负数->(向下)向自己滚动
break;
case WM_LBUTTONDBLCLK: //左键双击//双击需要在打开窗口时加上EX_DBLCLKS
break;
case WM_MOUSEMOVE: //鼠标移动
break;
}
}
}
}
/漂亮的按键+按键消息(上下左右)
//mx,my是否在指定的矩形区域
bool inArea(int mx, int my, int x, int y, int w, int h) {
if (mx > x && mx<x + w && my>y && my < y + h) {
return true;
}
return false;
}
bool button(int x, int y, int w, int h, const char* text) {
//绘制按钮颜色
if(inArea(msg.x, msg.y, x, y, w, h)) {
setfillcolor(RGB(195, 153, 137));
}
else {
setfillcolor(RGB(250, 250, 250));
}
//绘制按钮
fillroundrect(x, y, x + w, y + h, 5, 5);
//绘制按钮文本
int hspace = (w - textwidth(text)) / 2;
int vspace = (h - textheight(text)) / 2;
settextcolor(BLACK);
outtextxy(x + hspace, y + vspace, text);
//判断按钮是否被点击
if (msg.message == WM_LBUTTONDOWN && inArea(msg.x, msg.y, x, y, w, h)) {
return true;
}
return false;
}
void buttlefull() {
//设置背景模式
setbkmode(TRANSPARENT);
//定义小球的属性
int x = 50, y = 50, r = 50, speep = 3, vx = 0, vy = 0;
while (true) {
//获取消息
if (peekmessage(&msg, EX_MOUSE|EX_KEY)) {
}
//双缓冲绘图:防止绘图时文字一闪一闪//所有的绘图代码必须放在begin和end之间
//判断按键消息//可放在双缓冲绘图外面
if (msg.message == WM_KEYDOWN) {
printf("keydown\n");
//具体判断是哪个键按下
switch (msg.vkcode) {//虚拟键值
case VK_UP:
printf("上键按下\n");
vy = -1;
break;
case VK_DOWN:
printf("下键按下\n");
vy = 1;
break;
case VK_LEFT:
printf("左键按下\n");
vx = -1;
break;
case VK_RIGHT:
printf("右键按下\n");
vx = 1;
break;
case VK_SPACE:
printf("空格\n");
break;
case 'A'://对字符键,字符‘’里面大写
break;
}
}
else if (msg.message == WM_KEYUP) {
printf("keyup\n");
switch (msg.vkcode) {//虚拟键值
case VK_UP:
printf("上键按下\n");
vy = 0;
break;
case VK_DOWN:
printf("下键按下\n");
vy = 0;
break;
case VK_LEFT:
printf("左键按下\n");
vx = 0;
break;
case VK_RIGHT:
printf("右键按下\n");
vx = 0;
break;
case VK_SPACE:
printf("空格\n");
break;
case 'A'://对字符键,字符‘’里面大写
break;
}
}
BeginBatchDraw();
cleardevice();//清屏
if (button(20, 20, 150, 35, "My friend!")) {
printf("YES!\n");
}
if (button(200, 20, 150, 35, " NO my friend!")) {
printf("OOOOOO!\n");
}
//绘制小球
setfillcolor(RGB(138, 27, 255));
solidcircle(x, y, r);
x += speed * vx;
y += speed * vy;
EndBatchDraw();
Sleep(10);//使程序延迟十秒
outtextxy(0, 0, "NONONONONONO");//若不放在里面会一闪一闪(看不见)
//把消息类型设置为0
msg.message = 0;
}
}
int main(){
//创建一个图形窗口 宽度*高度
//都使用用‘|’
initgraph(666, 666,EX_SHOWCONSOLE|EX_NOMINIMIZE| EX_DBLCLKS);// EX_SHOWCONSOLE 为了显示控制台---可加可不加---不加的话控制台不显示//EX_NOCLOSE---无关闭按钮//EX_NOMINIMIZE---取消最小化按钮
//设置窗口的背景颜色
setbkcolor(RGB(20,134,21));//直接显示三原色的值
//setbkcolor(WHITE);//或直接输入颜色
//(清除之前颜色)用设置的颜色填充整个窗口
cleardevice();
//窗口的坐标体系:窗口左上角(不含标题栏)是坐标原点,x轴向右增大,y轴向下增大
//绘制图形
//drawShape();
//绘制文字
//drawText();
//文字居中
//centerText();
//获取消息
//MESSage();
/漂亮按键
buttlefull();
getchar();//防止程序退出
return 0;
}