学习视频【C/C++/EasyX】学编程,做游戏,小白快速入门图形编编程
消息处理
ExMessage:结构体,用于保存鼠标消息
ExMessage结构体中成员
message 表示“当前消息是什么”
x 表示“鼠标的x坐标”
y 表示“鼠标的y坐标”
message消息标识:
消息标识 | 消息类别 | 描述 |
---|---|---|
WM_MOUSEMOVE | EX_MOUSE | 鼠标移动消息 |
WM_MOUSEWHEEL | 鼠标滚轮拨动消息 | |
WM_LBUTTONDOWN | 左键按下消息 | |
WM_LBUTTONUP | 左键弹起消息 | |
WM_LBUTTONDBLCLK | 左键双击消息 | |
WM_MBUTTONDOWN | 中键按下消息 | |
WM_MBUTTONUP | 中键弹起消息 | |
WM_MBUTTONDBLCLK | 中键双击消息 | |
WM_RBUTTONDOWN | 右键按下消息 | |
WM_RBUTTONUP | 右键弹起消息 | |
WM_RBUTTONDBLCLK | 右键双击消息 | |
WM_KEYDOWN | EX_KEY | 按键按下消息 |
WM_KEYUP | 按键弹起消息 | |
WM_CHAR | EX_CHAR | 字符消息 |
WM_ACTIVATE | EX_WINDOW | 窗口激活状态改变消息 |
WM_MOVE | 窗口移动消息 | |
WM_SIZ | 窗口大小改变消息 |
peekmessage(ExMessage *msg, BYTE filter = -1, bool removemsg = true):用于获取一个消息,并立即返回。
msg : 指向消息结构体 ExMessage 的指针,用来保存获取到的消息。
filter : 指定要获取的消息范围,默认 -1 获取所有类别的消息。可以用以下值或值的组合获取指定类别的消息:
标志 | 描述 |
---|---|
EX_MOUSE | 鼠标消息。 |
EX_KEY | 按键消息。 |
EX_CHAR | 字符消息。 |
EX_WINDOW | 窗口消息。 |
removemsg : 在 peekmessage 处理完消息后,是否将其从消息队列中移除。
返回值:
如果获取到了消息,返回 true。
如果当前没有消息,返回 false。
#include<iostream>
#include<graphics.h>//包含图形库头文件
#include<easyx.h>//包含图形库头文件
using namespace std;
//绘制按钮 x,y为左上角坐标 w为按钮宽度,h为按钮高度
void button(int x, int y, int w, int h,const char* text)
{
setfillcolor(RGB(0, 162, 232));//圆角矩形填充颜色
fillroundrect(x, y, x + w, y + h, 10, 10);//绘制圆角矩形
char arr[50];
strcpy_s(arr, text);//将text中的字符拷贝到arr里
setbkmode(TRANSPARENT);//文字背景透明
settextstyle(30, 0, "楷体");//文字样式
outtextxy(x + ((w - textwidth(arr) )/2), y + (h-textheight(arr))/2, arr);//居中绘制文字
}
int main()
{
//创建一个窗口,确定窗口大小
initgraph(640, 480,EW_SHOWCONSOLE);
setbkcolor(RGB(225, 127, 39));//设置背景颜色
cleardevice();//清屏 设置背景颜色后要清屏才能将背景颜色设置好
button(200,200,150,100,"button");
ExMessage msg;//结构体 用于保存鼠标消息
while (1)
{
if (peekmessage(&msg, EM_MOUSE))
{
switch (msg.message)
{
//如果左键按下
case WM_LBUTTONDOWN:
if (msg.x >= 200 && msg.x <= 200 + 150 && msg.y >= 200 && msg.y <= 200 + 100)//判断鼠标点击是否在按钮内
{
cout << "点击了左键" << endl;
}
break;
case WM_RBUTTONDOWN:
if (msg.x >= 200 && msg.x <= 200 + 150 && msg.y >= 200 && msg.y <= 200 + 100)//判断鼠标点击是否在按钮内
{
cout << "点击了右键" << endl;
}
break;
}
}
}
//防止闪退
getchar();
//关闭窗口
closegraph();
return 0;
}