我们在用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)。可能这种方法比较麻烦,但简单易懂,希望大佬放过。哈哈哈哈
如果各位以前玩过那种用一只特殊的笔可以在特殊的那个小白板上涂涂画画,如果想擦掉之前画的就可以把板子底下的按钮从这个末端拖到另一个末端实现清空作用,这里可以实现前一部分的功能,这是我的DIY涂鸦表情包附上个人字体(全程鼠标完成的画面)
详细代码:
#include<graphics.h>
#include<conio.h>
int main()
initgraph(640, 480);
setbkcolor(DARKGRA
附上学习写图形库的链接:
https://memcpy0.blog.csdn.net/article/details/102027736
https://blog.csdn.net/weixin_44044411/article/details/104276757
#include <iostream>
#include <string>
#include <conio.h>
#include <graphics.h>
#include <Windows
EasyX图形界面库采用中文帮助文档,内含大量示例,简单易用。
许多学编程的都是从 C 语言开始入门的,而目前的现状是:
1. 有些学校直接拿 VC 来讲 C 语言,因为 VC 的编辑和调试环境都很优秀,并且 VC 有适合教学的免费版本。可惜在 VC 下只能做一些文字性的练习题,想画条直线画个圆都很难,还要注册窗口类、建消息循环等等,初学者会受严重打击的。初学编程想要绘图就得用 TC,很是无奈。
2. 还有计算机图形学,这门课程的重点是绘图算法,而不是 Windows 编程。所以,许多老师不得不用 TC 教学,因为 Windows 绘图太复杂了,会偏离教学的重点。新的图形学的书有不少是用的 OpenGL,可是门槛依然很高。
所以,我们想给大家一个更好的学习平台,就是 VC 方便的开发平台和 TC 简单的绘图功能,于是就有了这个 EasyX 库。如果您刚开始学 C 语言,或者您是一位教 C 语言的老师,再或者您在教计算机图形学,那么这个库一定会让您兴奋的。