赞
踩
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】
我曾经写过一篇关于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 0
- 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;
- #else
-
- 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;
- }
- #endif
-
- 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);
-
- }
- _getch();
- closegraph();
- }
今天的例子比较简单,其主要目的不在于这几行代码,而是希望可以帮助大家建立学习图形的兴趣,写出更多好玩、实用的应用。从学习中找到乐趣、取得进步。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。