精心打造:使用easyx做界面时,想要鼠标到一个按键时背景颜色发生改变

我们在用easyx开发小的应用程序时(比如写表白程序doge),感觉很高级,但还要注意一些细节的东西以使我们的程序变得更完美,也让客户(或者你的女朋友)感觉到你的细心以及注意细节,不得不面临一些细节的难题。

这里要说的就是如何使鼠标与界面进行交互,包括以下几个内容(主要是使背景发生变化,这里为了给你自信所以把一些前面基础的内容也给你展示出来):1、如何用easyx建立一个操作界面;2、如何建立按钮;3、如果只有一个按钮如何使鼠标移动到按钮上时背景变化;4、如果有很多按钮应该如何做出改变。

#1、如何建立一个指定大小的操作界面

#include <easyx.h>
#include <graphics.h> 

initgraph(1100,800);

首先第一步肯定是应用两个头文件,然后引用initgraph函数,两个参数分别是x,y轴的坐标。建立的界面是向右为x正方向,向下是y正方向。

#2、创建按钮

IMAGE button;
loadimage(&button, L"按钮.jpg", 20, 50);
putimage(100, 20, &button, SRCINVERT);

首先要在网上找到心仪的做为按钮的图片,然后需要将照片导入到程序中,方法如下:下载照片(记得修改为好记得名字哦)->将图片转移到程序源文件所在的文件夹->进行程序操作。程序操作如下:先引用关键字IMAGE,定义一个图片保存得空间名为button;然后用loadimage函数下载图片到程序中,其中有4个参数,以下分别叫做a,b,c,d,a是一个地址,即图片保存的内存位置;b是要下载的图片的名字(c++中可能会有警告,可以在前加上L试试);c d是要保存图片的大小(xy坐标表示)。接下来要引用putimage函数将图片放置到操作界面的任何位置,也有4个参数暂且叫他们a1,b1, c1, d1,a1 b1是图片左上角的位置坐标;c1是图片的地址;d1是一种模式,有兴趣可以搜搜看。

#3、单个按钮如何与鼠标交互

MOUSEMSG m;
m = GetMouseMsg();
bool c1 = 1, now = 0;
if (m.uMsg == WM_MOUSEMOVE)
        {
            if (m.x > 800 && m.x < 1000 && m.y < 250 && m.y > 200 && !c1)
            {
                now = 1;c1 = 1;
                fillrectangle(800, 200, 1000, 250);
            }
            if ((m.x < 800 || m.x > 1000 || m.y > 250 || m.y <200) && now)
            {
                c1 = 0;now = 0;
                fillrectangle(800, 200, 1000, 250);
            }
        }

首先引用MOUSEMSG,创建一个鼠标对象m;然后将m的属性用GetMouseMsg函数赋值得到鼠标在界面的坐标;WM_MOUSEMOVE表示鼠标移动,m.uMsg是鼠标的状态,m.x是鼠标的x坐标,m.y是鼠标的y坐标;此程序表示鼠标移动到x坐标800-1000,y坐标200-250时填充该矩形的颜色。当鼠标移动出按钮时,再次填充矩形使其恢复原色。

变量now c1可以使其表现更稳定,不会出现一直乱闪的情况。

以下介绍fillrectangle函数,这个函数是使用当前线形和当前填充样式绘制有外框的填充矩形。

void fillrectangle{
int left,
int top,
int right,
int bottom
};

#4、多个按钮如何改进程序

你会发现当有多个按钮时,以上程序会出现按钮乱闪的情况,只是就需要对程序进行改进,以下。

MOUSEMSG m;
    int now = 0, now2 = 0, now3 = 0, now4 = 0;
    int c1 = 1, c2 = 1, c3 = 1, c4 = 1, k1 = 1, k2 = 1, k3 = 1, k4 = 1;
    while (1)
    {
        m = GetMouseMsg();
        setrop2(R2_XORPEN);
        if (m.uMsg == WM_MOUSEMOVE)
        {
            if (m.x > 800 && m.x < 1000 && m.y < 250 && m.y > 200 && (c1 == 0 || k1 == 1))
            {
                now = 1; k1 = 0; c1 = 1;
                fillrectangle(800, 200, 1000, 250);
            }
            if (now != 0 && (m.x < 800 || m.x > 1000 || m.y > 250 || m.y < 200))
            {
                now = 0; c1 = 0;
                fillrectangle(800, 200, 1000, 250);
            }
            if (m.x > 800 && m.x < 950 && m.y < 367 && m.y > 317 && (c2 == 0 || k2 == 1))
            {
                now2 = 1; k2 = 0; c2 = 1;
                fillrectangle(800, 317, 950, 367);
            }
            if (now2 != 0 && (m.x < 800 || m.x > 950 || m.y > 367 || m.y < 317))
            {
                now2 = 0; c2 = 0;
                fillrectangle(800, 317, 950, 367);
            }
            if (m.x > 800 && m.x < 1000 && m.y < 484 && m.y > 434 && (c3 == 0 || k3 == 1))
            {
                now3 = 1; k3 = 0; c3 = 1;
                fillrectangle(800, 434, 1000, 484);
            }
            if (now3 != 0 && (m.x < 800 || m.x > 1000 || m.y > 484 || m.y < 434))
            {
                now3 = 0; c3 = 0;
                fillrectangle(800, 434, 1000, 484);
            }
            if (m.x > 800 && m.x < 900 && m.y < 601 && m.y > 551 && (c4 == 0 || k4 == 1))
            {
                now4 = 1; k4 = 0; c4 = 1;
                fillrectangle(800, 551, 900, 601);
            }
            if (now4 != 0 && (m.x < 800 || m.x > 900 || m.y > 601 || m.y < 551))
            {
                now4 = 0; c4 = 0;
                fillrectangle(800, 551, 900, 601);
            }
        }

这里是有4个按钮,添加k系列变量使其表现更稳定。

*结语:

这就是要分享的小tips了,希望成功哦(doge)。可能这种方法比较麻烦,但简单易懂,希望大佬放过。哈哈哈哈

猜你喜欢

转载自blog.csdn.net/m0_73747975/article/details/128687664
今日推荐