失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 随想录(easyx中的键盘输入和鼠标消息)

随想录(easyx中的键盘输入和鼠标消息)

时间:2023-03-13 23:34:02

相关推荐

随想录(easyx中的键盘输入和鼠标消息)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @】

我曾经写过一篇关于easyx的blog,地址在这。easyx是基于win32 api最简单的图形库。它按照graphic头文件给大家提供简洁的API接口,使用起来非常方便。基本上,只需要几行代码,就可以画出一个图形,比如这样,

int main(){initgraph(600, 800);circle(100, 100, 100);_getch();closegraph();}

当然,今天我们文章的目的不是输出一个图形,而是怎么控制图形。比如,如果用键盘控制图形。目前在easyx上面有_kbhit()和_getch()两个函数,前者是非阻塞函数,通知是否有key按下,后者是阻塞函数,通知按下的是什么字符。比如,我们可以这么操作,

while (!_kbhit());val = _getch();i = 0;j = 0;if ('a' == val)i = -10;else if ('w' == val)j = -10;else if ('d' == val)i = 10;else if ('s' == val)j = 10;

除了键盘输入,easyx还支持鼠标输入,比如我们可以从GetMouseMsg函数获取鼠标信息,这是一个阻塞函数,

m = GetMouseMsg();i = 0;j = 0;switch (m.uMsg){case WM_MOUSEMOVE:i = 10;break;case WM_LBUTTONDBLCLK:case WM_LBUTTONDOWN:case WM_LBUTTONUP:i = -10;break;case WM_RBUTTONDBLCLK:case WM_RBUTTONDOWN:case WM_RBUTTONUP:j = 10;break;case WM_MOUSEWHEEL:j = -10;break;default:break;}

鼠标的详细信息也很多,大家可以参考这个数据结构,

struct MOUSEMSG{UINT uMsg;// 当前鼠标消息bool mkCtrl;// Ctrl 键是否按下bool mkShift;// Shift 键是否按下bool mkLButton;// 鼠标左键是否按下bool mkMButton;// 鼠标中键是否按下bool mkRButton;// 鼠标右键是否按下short x;// 当前鼠标 x 坐标short y;// 当前鼠标 y 坐标short wheel;// 鼠标滚轮滚动值 (120 的倍数)};

为了保证圆心不在窗口之外,还必须给x、y加上一些限制条件,即x和y都不能小于100、大于500,

cleardevice();x = x + i;y = y + j;if (x < 100) x = 100;if (x > 500) x = 500;if (y < 100) y = 100;if (y > 500) y = 500;circle(x, y, 100);

上面的例子只是一个简单的实例,想偷懒的朋友可以获取参考这个完整的代码,

int main(){initgraph(600, 800);circle(100, 100, 100);int x = 100;int y = 100;int i = 0;int j = 0;char val;MOUSEMSG m;while (1){#if 0while (!_kbhit());val = _getch();i = 0;j = 0;if ('a' == val)i = -10;else if ('w' == val)j = -10;else if ('d' == val)i = 10;else if ('s' == val)j = 10;#elsem = GetMouseMsg();i = 0;j = 0;switch (m.uMsg){case WM_MOUSEMOVE:i = 10;break;case WM_LBUTTONDBLCLK:case WM_LBUTTONDOWN:case WM_LBUTTONUP:i = -10;break;case WM_RBUTTONDBLCLK:case WM_RBUTTONDOWN:case WM_RBUTTONUP:j = 10;break;case WM_MOUSEWHEEL:j = -10;break;default:break;}#endifcleardevice();x = x + i;y = y + j;if (x < 100) x = 100;if (x > 500) x = 500;if (y < 100) y = 100;if (y > 500) y = 500;circle(x, y, 100);}_getch();closegraph();}

今天的例子比较简单,其主要目的不在于这几行代码,而是希望可以帮助大家建立学习图形的兴趣,写出更多好玩、实用的应用。从学习中找到乐趣、取得进步。

如果觉得《随想录(easyx中的键盘输入和鼠标消息)》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。