当前位置:   article > 正文

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

easyx的鼠标键盘输入不了

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

 

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

  1. int main()
  2. {
  3. initgraph(600, 800);
  4. circle(100, 100, 100);
  5. _getch();
  6. closegraph();
  7. }

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

  1. while (!_kbhit());
  2. val = _getch();
  3. i = 0;
  4. j = 0;
  5. if ('a' == val)
  6. i = -10;
  7. else if ('w' == val)
  8. j = -10;
  9. else if ('d' == val)
  10. i = 10;
  11. else if ('s' == val)
  12. j = 10;

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

  1. m = GetMouseMsg();
  2. i = 0;
  3. j = 0;
  4. switch (m.uMsg)
  5. {
  6. case WM_MOUSEMOVE:
  7. i = 10;
  8. break;
  9. case WM_LBUTTONDBLCLK:
  10. case WM_LBUTTONDOWN:
  11. case WM_LBUTTONUP:
  12. i = -10;
  13. break;
  14. case WM_RBUTTONDBLCLK:
  15. case WM_RBUTTONDOWN:
  16. case WM_RBUTTONUP:
  17. j = 10;
  18. break;
  19. case WM_MOUSEWHEEL:
  20. j = -10;
  21. break;
  22. default:
  23. break;
  24. }

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

  1. struct MOUSEMSG
  2. {
  3. UINT uMsg; // 当前鼠标消息
  4. bool mkCtrl; // Ctrl 键是否按下
  5. bool mkShift; // Shift 键是否按下
  6. bool mkLButton; // 鼠标左键是否按下
  7. bool mkMButton; // 鼠标中键是否按下
  8. bool mkRButton; // 鼠标右键是否按下
  9. short x; // 当前鼠标 x 坐标
  10. short y; // 当前鼠标 y 坐标
  11. short wheel; // 鼠标滚轮滚动值 (120 的倍数)
  12. };

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

  1. cleardevice();
  2. x = x + i;
  3. y = y + j;
  4. if (x < 100) x = 100;
  5. if (x > 500) x = 500;
  6. if (y < 100) y = 100;
  7. if (y > 500) y = 500;
  8. circle(x, y, 100);

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

  1. int main()
  2. {
  3. initgraph(600, 800);
  4. circle(100, 100, 100);
  5. int x = 100;
  6. int y = 100;
  7. int i = 0;
  8. int j = 0;
  9. char val;
  10. MOUSEMSG m;
  11. while (1)
  12. {
  13. #if 0
  14. while (!_kbhit());
  15. val = _getch();
  16. i = 0;
  17. j = 0;
  18. if ('a' == val)
  19. i = -10;
  20. else if ('w' == val)
  21. j = -10;
  22. else if ('d' == val)
  23. i = 10;
  24. else if ('s' == val)
  25. j = 10;
  26. #else
  27. m = GetMouseMsg();
  28. i = 0;
  29. j = 0;
  30. switch (m.uMsg)
  31. {
  32. case WM_MOUSEMOVE:
  33. i = 10;
  34. break;
  35. case WM_LBUTTONDBLCLK:
  36. case WM_LBUTTONDOWN:
  37. case WM_LBUTTONUP:
  38. i = -10;
  39. break;
  40. case WM_RBUTTONDBLCLK:
  41. case WM_RBUTTONDOWN:
  42. case WM_RBUTTONUP:
  43. j = 10;
  44. break;
  45. case WM_MOUSEWHEEL:
  46. j = -10;
  47. break;
  48. default:
  49. break;
  50. }
  51. #endif
  52. cleardevice();
  53. x = x + i;
  54. y = y + j;
  55. if (x < 100) x = 100;
  56. if (x > 500) x = 500;
  57. if (y < 100) y = 100;
  58. if (y > 500) y = 500;
  59. circle(x, y, 100);
  60. }
  61. _getch();
  62. closegraph();
  63. }

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

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/94103
推荐阅读
相关标签
  

闽ICP备14008679号