MOUSE.CPP
上传用户:wtrl82617
上传日期:2007-01-07
资源大小:187k
文件大小:3k
源码类别:

界面编程

开发平台:

DOS

  1. #include "mouse.h"
  2. #include "yyxsys.h"
  3. mouse_class::mouse_class()
  4. {
  5. reset();
  6. mouse_x=0; mouse_y=0;
  7. set_posn();
  8. // setup event handler
  9. m1=M_SET_EVENT_HNDL;
  10. // m3=0x2 | 0x4   ; // press & release LEFT BUTTON
  11. m3=1 ; // press & release LEFT BUTTON
  12. _ES =FP_SEG ((void far *) mouse_event_handler);
  13. m4 =FP_OFF ((void far*)  mouse_event_handler);
  14. // mouse(&m1,&m2,&m3,&m4);
  15. prev_cursor_state=FALSE;
  16. on(0);
  17. }
  18. mouse_class::~mouse_class()
  19. {
  20. m1=M_SET_EVENT_HNDL;
  21. // m3=0x2 | 0x4   ; // press & release LEFT BUTTON
  22. m3=0 ; // press & release LEFT BUTTON
  23. _ES =FP_SEG ((void far *) mouse_event_handler);
  24. m4 =FP_OFF ((void far*)  mouse_event_handler);
  25. mouse(&m1,&m2,&m3,&m4);
  26. reset();
  27. }
  28. void mouse_class::mouse(int *m1,int *m2,int *m3,int *m4)
  29. {
  30. union REGS inregs,outregs;
  31. inregs.x.ax=*m1;
  32. inregs.x.bx=*m2;
  33. inregs.x.cx=*m3;
  34. inregs.x.dx=*m4;
  35. int86 (0x33,&inregs,&outregs);
  36. *m1=outregs.x.ax;
  37. *m2=outregs.x.bx;
  38. *m3=outregs.x.cx;
  39. *m4=outregs.x.dx;
  40. }
  41. BOOL mouse_class::reset()
  42. {   m1=M_RESET;
  43. mouse(&m1,&m2,&m3,&m4);
  44. return (m1==-1);
  45. }
  46. void mouse_class::on(int restoreflag) //0 ;regardless of state; //1 conditional
  47. //first 0; later 1;only if previous is on
  48. {   if (!restoreflag||prev_cursor_state) {
  49. m1=M_SHOW_CURS;
  50. mouse (&m1,&m2,&m3,&m4);
  51. prev_cursor_state=TRUE;
  52. }
  53. }
  54. void mouse_class::off(int tempflag) //0 ;regardless of state; //1 conditional
  55. //first 0; later 1;only if previous is on, set to off
  56. //usually use (1)
  57. {   if (prev_cursor_state) {
  58. m1=M_HIDE_CURS;
  59. mouse (&m1,&m2,&m3,&m4);
  60. if (!tempflag) prev_cursor_state=FALSE;
  61. }
  62. }
  63. void mouse_class::get_posn()
  64. {
  65. m1=M_GET_STATUS;
  66. mouse (&m1,&m2,&mouse_x,&mouse_y);
  67. }
  68. void mouse_class::get_posn_xy(int &x,int &y)
  69. {
  70. m1=M_GET_STATUS;
  71. mouse (&m1,&m2,&x,&y);
  72. }
  73. void mouse_class::set_posn(int x,int y)
  74. {
  75. m1=M_SET_CURS;
  76. if (!x||!y) mouse (&m1,&m2,&x,&y);
  77. else mouse (&m1,&m2,&mouse_x,&mouse_y);
  78. }
  79. int mouse_class::get_press_count(int mouse_button)
  80. {
  81. m1=M_GET_PRESS;
  82. m2=mouse_button;
  83. mouse (&m1,&m2,&m3,&m4);
  84. if (mouse_button==LEFT_BUTTON) left_button_status =m1; else
  85. if (mouse_button==RIGHT_BUTTON) right_button_status =m2;
  86. return (m2); //0,1,2,3,4......since last call
  87. }
  88. int mouse_class::get_release_count(int mouse_button)
  89. {
  90. m1=M_GET_REL;
  91. m2=mouse_button;
  92. mouse (&m1,&m2,&m3,&m4);
  93. if (mouse_button==LEFT_BUTTON) left_button_status =m1; else
  94. if (mouse_button==RIGHT_BUTTON) right_button_status =m2;
  95. return (m2); //0,1,2,3,4......since last call
  96. }
  97. int mouse_class::mouse_event_handler(...)
  98. {
  99. putch('07');
  100. }