C-01-EasyX

EasyX

一、基础知识

使用时包含头文件 <graphics.h> 即可。注意 easyX 只能识别后缀为 .cpp 的源文件, .c 不行。

颜色:RGB(红绿蓝)三原色。0~255。

程序里表示 RGB(红色部分,绿色部分,蓝色部分)

坐标系原点在左上角,右是X轴正方向,下是Y轴正方向

设备:就是绘图界面。

在EasyX中,设备分为两种:一种是默认的绘图窗口,另一种是IMAGE对象。通过 SetWorkingImage() 函数可以设置当前用于绘图的设备。

二、窗口函数

initgraph(int width,int height,int flag=NULL);  //初始化绘图窗口(创建窗口)
// width 指定窗口宽度;
// height 指定窗口高度; 
// flag 窗口样式,默认为NULL。还有其他三种情况:showconsole显示控制台 noclose不能关闭 nominimize只能关闭,不能隐藏和放大
//使三种情况都满足: initgraph(640,480,SHOWCONSOLE | NOCLOSE | NOMINIMIZE) ,就能出现关不掉的窗口
closegraph();   //关闭绘图窗口
cleardevice();  //清空绘图设备

有开始就有关闭,缺一不可。

示例程序:

#include<graphics.h>
#include<stdio.h>
int main()
{
    initgraph(640,480);
    getchar();      //使窗口停留
    closegraph();
    return 0;
}

左上角不是路径而是文件名。

三、绘图函数

1.从填充样式

绘图函数根据填充样式可以分类为:无填充,有边框填充,无边框三种。

以画圆为例,分别对应:circle() ; fillcircle() ; solidcircle() ;

(无填充没有前缀,有边框加前缀 fill- ,无边框加前缀 solid-

2.从形状

根据形状来分,常用的可以分为八种:

circle(int x,int y, int radius)    //圆:原点的x,y坐标,半径
ellipse    //椭圆
pie        //扇形
polygon    //多边形
rectangle(int x1,int y1,int x2,int y2)  //矩形:左上角和右下角的坐标
roundrect  //圆角矩形
line       //线
putpixel   //点

3.颜色

setfillcolor(颜色);    //设置填充颜色
setlinecolor(颜色);   //设置线条颜色
setlinestyle(样式,宽度); //设置线条样式
//更改背景颜色需要两步
setbkcolor(颜色); //step1:设置背景颜色
cleardevice();   //step2:清除黑色

​ 示例:

四、文字绘制函数

outtextxy(int x,int y,LPCTSTR str);     //在指定位置输入字符串:x,y,字符串内容
settextcolor(颜色);
settextstyle(int height,int width,"字体样式");    //宽度写0==自适应高度
setbkmode(TRANSPARENT);         //设置背景框为透明

int width = textwidth("文字");  //计算文字所占的像素宽度
int height = textheight("文字"); //计算文字所占的像素高度

居中文字的示例

fillrectangle(200, 50, 500, 100); //绘制宽(500-200),高(100-50)的矩形

settextcolor(RGB(173, 0, 13));
char arr[] = "我是居中显示";
int width = 300/2 - textwidth(arr)/2;     //计算arr[]里文字所占的像素宽度
int height = 50/2 - textheight(arr)/2;    //计算...的像素高度
outtextxy(200+width, 50+height, arr);

注意,此处可能出现报错:

这是因为字符串的实际存储有多种编码格式,如果默认的编码格式和实际执行的平台不相符就会发生错误。

解决方法:1.在字符串前面加上大写的L

​ 2.用TEXT()把字符串包起来

​ 3.只需右键项目>属性>配置属性>高级,把高级属性中的字符集改为使用多字节字符集

!

五、图像处理函数

IMAGE:图像变量,和 int ,char ,一样的变量类型

eg: IMAGE img;

loadimage(IMAGE *pDstimg, LPCTSTR pimgFile,int nWidth=0, int nHeight=0, bool bResize=false);
//pDstimag  保存图像的 IMAGE对象的指针 &img
//pimgFile  图片所在的位置
//nWidth    图片的拉伸宽度
//nHeight   图片的拉伸高度
//bResize=false  是否调整 IMAGE 的大小以适应图片
putimage(int dstX,int dstY,IMAGE *pSrcimg,DWORD dwRop=SRCCOPY);
//dstX  绘制位置的x坐标
//dstY  绘制位置的y坐标
//pSrcimg   要绘制的 IMAGE对象的指针 &img
//dwRop=SRCCOPY 三元光栅操作码

示例

IMAGE img;   //定义一个(变量)对象
loadimage(&img,"./backgroud.jpg",320,480);  //加载图片+相对路径。(宽,高)这俩可以不要。
//优先使用.jpg。 因为.png不支持背景透明
//如果路径中有空格,则需要 双引号+反斜杠转义 
// eg: \"Hello world\"
putimage(0, 0, &img);

六、鼠标操作

1.MOUSEMSG 类型

eg: MOUSEMSG msg;

MoustHit() 来判断是否有鼠标消息,是布尔类型。有鼠标返回“真”,无消息返回“假”。(左右键,中键,滚轮,移动,双击)

有鼠标消息后获取鼠标消息:msg = GetMouseMsg();

//鼠标消息的主要成员:
uMsg    //当前鼠标消息:WM_LBUTTONDOWN鼠标左键消息
                    //WM_RBUTTONDOWN鼠标右键消息
x       //当前鼠标的x,y坐标
y

示例:

while (1) {     //不断处理事务
    if (MouseHit())
    {
        cleardevice();
        MOUSEMSG msg = GetMouseMsg();
        //消息分发
        switch (msg.uMsg)
        {
        case WM_LBUTTONDOWN:
            outtextxy(400, 400, "鼠标左键按下");
            printf("鼠标坐标(%d,%d)\n", msg.x, msg.y);
            break;
        case WM_RBUTTONDOWN:
            outtextxy(300, 300, "鼠标右键按下");
            printf("鼠标坐标(%d,%d)\n", msg.x, msg.y);
            break;
        }
    }
}

2.新版函数

头文件:#include

示例:

#include<stdio.h>
#include<easyx.h>

void button(int x, int y, int w, int h)
{
    setbkmode(TRANSPARENT);
    setfillcolor(BROWN);
    fillroundrect(x, y, x + w, y + h, 10, 10);

    settextstyle(30, 0, "黑体");

    char text[] = "button";
    int tx = x + (w - textwidth(text))/2;
    int ty = y + (h - textheight(text)) / 2;

    outtextxy(tx, ty, text);
}
int main()
{
    initgraph(640, 480, EX_SHOWCONSOLE);
    button(50, 50, 150, 50);

    while (true)
    {
        ExMessage msg;
        if (peekmessage(&msg, EX_MOUSE))
        {
            switch (msg.message)
            {
            case WM_LBUTTONDOWN:
                if (msg.x >= 50 && msg.x <= 50 + 150 && msg.y >= 50 && msg.y <= 50 + 50)
                {
                    printf("我是按钮我被点击啦\n");
                }
            }
        }
    }

    getchar();
    return 0;
}

七、键盘消息函数

getch();    //需要头文件 conio.h
GetAsyncKeyState(键值);   //需要头文件 windows.h ,但是 EasyX 本来就包含了 windows文件,所以无需再包含

getch(); 需要使用返回值来判断

​ 如果是字母,则直接与字母比较,如:'A'

​ 如果是非 ASCII 表的字符,则用虚拟键值,如:上==72,下==80,左==75,右==77

GetAsyncKeyState(键值); 需要传入一个键值,如果按下,则返回真

八、解决闪屏现象

在设备上不断进行绘图操作时,会产生闪屏现象。用两个函数就能处理:

BeginBatchDraw();   //开始批量绘图
//中间是绘图代码
EndBatchDraw();     //结束批量绘图

九、弹出对话框

MessageBox(NULL,"我是文字文字","我是标题",MB_OKCANCEL);
        //NULL可以改成窗口句柄          //按钮类型
//会返回值,可以用来比较,eg:
int point = MessageBox(NULL,"我是文字文字","我是标题",MB_OKCANCEL);
if(point==IDOK){
    printf("你点击了OK")
}else if(point==IDCANCEL){
    printf("你点击了取消")
}

十、修改窗口标题

HWND hnd = GetHWnd();   //获取窗口句柄
SetWindowText(hnd,"新标题"); //设置窗口标题
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇