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

界面编程

开发平台:

DOS

  1. // 1993 (c) ALL RIGHTS RESERVED
  2. // AUTHOR  BY XuYongYong
  3. /*  checkbox.cpp
  4. */
  5. #include "checkbox.h"
  6. ////////////////////////////////////////////////////////////////////////////
  7. checkbox_class::checkbox_class (int ID,char *title_hotkey,
  8. int left,int top,int width,int height )
  9. : control_class(ID,title_hotkey,NORMAL,CHECKBOX,
  10. left,top,width,height,UNPUSHED,PUSHED,UNPUSHED )
  11. {
  12.   int text_height=textheight(title);
  13.   int bar =bar_height *0.7;
  14. title_pos_y =top  + (height-text_height)/2-2;
  15. title_pos_x =left + (height);
  16. SetRect (&box,left,top,left+bar,top+bar);
  17. OffsetRect (&box,(height-bar)/2,(height-bar)/2 );
  18. }
  19. /**************************************************************************/
  20. void checkbox_class::draw ()
  21. {   if ( status & INVISIBLE) return;    // INVISIBLE
  22. setcolor (BLACK);
  23. FrameRect(box);
  24. control_class::draw ();
  25. }
  26. /**************************************************************************/
  27. void checkbox_class::unselect ( )
  28. {   setcolor (WHITE);
  29. setlinestyle( DOTTED_LINE,1,NORM_WIDTH );
  30. rectangle (title_pos_x-2,title_pos_y+1,title_pos_x+textwidth (title)+2,
  31. title_pos_y+textheight (title)+2 );
  32. setlinestyle( SOLID_LINE,1,NORM_WIDTH );
  33. }
  34. /**************************************************************************/
  35. int checkbox_class::control_change_value
  36. (int new_value )
  37. {   if (control_class::control_change_value(new_value)==TRUE)
  38. return TRUE;
  39. switch (new_value) {
  40. case UNCHECKED:
  41. setcolor (WHITE);
  42. break;
  43. case CHECKED:
  44. setcolor (BLACK);
  45. break;
  46. }
  47. line ( box.left,box.top,box.right,box.bottom );
  48. line ( box.left,box.bottom,box.right,box.top );
  49. current_value =new_value;
  50. return TRUE;
  51. }
  52. /**************************************************************************/
  53. int checkbox_class::key_pressed_handler (int key_scan_num )
  54. {
  55. switch (key_scan_num ) {
  56. case SPACEKEY:
  57. control_change_value
  58. (1-current_value);
  59. thequeue.SendMessage(ID,
  60. CheckBoxValueChangedMSG,this);
  61. return TRUE;
  62. default:return control_class::key_pressed_handler (key_scan_num);
  63. }
  64. }
  65. /**************************************************************************/
  66. int checkbox_class::msg_handler(MSG& message)
  67. {
  68. switch (message.Action){
  69. case MouseLButtonDownMSG:
  70. control_change_value
  71. (1-current_value);
  72. thequeue.SendMessage(ID,
  73. CheckBoxValueChangedMSG,this);
  74. return TRUE;
  75. default:return control_class::msg_handler (message);
  76. }
  77. }