EasyX 实现鼠标、按键、字符、窗口消息的混合判断
easyx吧
全部回复
仅看楼主
level 12
yangw80 楼主
注:以下代码基于 EasyX_20210719 版本。
实现这样一个奇怪的要求(仅用于功能展示):
1. 一行行的自动画小圆。并且,不受按键、鼠标影响。
2. 同时处理鼠标消息,鼠标移动的时候画点,按左键画大圆。
3. 同时处理按键消息,如果任意按键按下,功能1的自动小圆用红色画;否则,小圆用白色画。
4. 同时处理字符消息,按下的每一个字符,会拼成一个字符串,然后逐行输出在屏幕上。
5. 同时处理窗口消息,窗口不活动的时候,功能1的自动小圆用绿色画;否则,小圆用白色画。窗口最小化的时候,功能1的自动小圆停止绘画,窗口恢复后,功能1继续画。
2 楼贴代码
2021年07月20日 14点07分 1
level 12
yangw80 楼主
获取中文字符的输入也完美的支持了。
2021年07月20日 14点07分 3
level 12
yangw80 楼主
按任意键开始执行
#include <graphics.h>
#include <stdio.h>
int main()
{
initgraph(640, 480);
int x = 0, y = 20;// 自动画圆的坐标
TCHAR s[100];// 获取到的字符
int si = 0;// 字符存储位置
bool act = true;// 窗口是否激活
ExMessage msg;// 消息变量
getmessage(EM_KEY);// 按任意键继续
while (true)
{
while (peekmessage(&msg))
{
switch (msg.message)
{
case WM_MOUSEMOVE:// 处理鼠标移动消息
putpixel(msg.x, msg.y, GREEN);
break;
case WM_LBUTTONDOWN:// 处理鼠标左键按下消息
circle(msg.x, msg.y, 20);
break;
case WM_CHAR:// 处理收到字符消息
s[si] = msg.ch;
s[si + 1] = 0;
outtextxy(0, si * 12 % 470, s);
si = (si + 1) % 98;
break;
case WM_KEYDOWN:// 处理按键按下消息
if (!msg.prevdown)
setlinecolor(RED);
break;
case WM_KEYUP:// 处理按键抬起消息
setlinecolor(WHITE);
break;
case WM_ACTIVATE:// 处理窗口激活消息
if (msg.wParam != 0)
setlinecolor(WHITE);
else
setlinecolor(GREEN);
break;
case WM_SIZE:// 处理窗口大小改变的消息
if (msg.wParam == SIZE_MINIMIZED)// 最小化
act = false;
else if (msg.wParam == SIZE_RESTORED)// 恢复
act = true;
break;
}
}
if (act)
{
if ((x += 2) >= 640)x = 0, y += 20;
circle(x, y, 5);
}
Sleep(20);
}
return 0;
}
2021年07月31日 16点07分 4
1