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

界面编程

开发平台:

DOS

  1. // 1993 (c) ALL RIGHTS RESERVED
  2. // AUTHOR  BY XuYongYong
  3. /*  yyxsys1.cpp
  4. */
  5. #include "yyxsys1.h"
  6. void get_title_hotkey(char *title_hotkey,byte& hotkey)
  7. {   char title[80];
  8. int i,j;
  9. for (i=0,j=0; i<=strlen (title_hotkey); i++){
  10. if (title_hotkey[i] !='&' ) { title[j]=title_hotkey[i]; j++;}
  11. else hotkey=j;
  12. }
  13. strcpy (title_hotkey,title);
  14. }
  15. void draw_hotkey(char *title,byte hotkey,int title_pos_x,int title_pos_y)
  16. {
  17.         if (hotkey ==0xff) return;
  18.   char tmpa[50];
  19.     strcpy(tmpa,title);
  20.     tmpa[hotkey+1]=0;
  21. int width1,width2;
  22.         width2=textwidth (tmpa);
  23.         tmpa[hotkey]=0;
  24.     width1=textwidth (tmpa);
  25. line(title_pos_x +width1,
  26.  title_pos_y +textheight("U") +2,
  27.  title_pos_x +width2,
  28.  title_pos_y +textheight("U") +2 );
  29. }
  30. void draw_out_button (Rect therect)
  31. { Rect tmprect =therect;
  32. FillRect (tmprect ,LIGHTGRAY);
  33. setlinestyle ( SOLID_LINE,1,NORM_WIDTH );
  34. setcolor(BLACK); FrameRoundRect (tmprect,2,2);
  35. InsetRect (&tmprect,-1,-1);
  36. tmprect.right -=LINE_WIDTH-2;
  37. tmprect.bottom -=LINE_WIDTH-2;
  38. setcolor ( WHITE);
  39. moveto(tmprect.left,tmprect.bottom );
  40. lineto(tmprect.left,tmprect.top);
  41. lineto(tmprect.right,tmprect.top);
  42. setlinestyle ( SOLID_LINE,1,THICK_WIDTH );
  43. setcolor (DARKGRAY );
  44. lineto(tmprect.right,tmprect.bottom);
  45. lineto(tmprect.left,tmprect.bottom);
  46. setlinestyle ( SOLID_LINE,1,NORM_WIDTH );
  47. }
  48. void draw_in_button (Rect therect)
  49. {
  50. setcolor ( DARKGRAY);
  51. moveto(therect.left,therect.bottom );
  52. lineto(therect.left,therect.top);
  53. lineto(therect.right,therect.top);
  54. setcolor (WHITE );
  55. lineto(therect.right,therect.bottom);
  56. lineto(therect.left,therect.bottom);
  57. }
  58. void draw_win_frame_rect (const Rect& therect )
  59. { Rect temp_rect =therect;
  60. setlinestyle ( SOLID_LINE,1,NORM_WIDTH );
  61. setcolor (BLACK);
  62. FrameRect (temp_rect );
  63. setlinestyle ( SOLID_LINE,1,THICK_WIDTH );
  64. InsetRect(&temp_rect,-2,-2);
  65. setcolor (LIGHTGRAY);
  66. FrameRect (temp_rect);
  67. setlinestyle ( SOLID_LINE,1,NORM_WIDTH );
  68.     setcolor (BLACK);
  69. InsetRect (&temp_rect,  -1 ,-1 );
  70. FrameRect (temp_rect);
  71. line(temp_rect.left,temp_rect.top+bar_height,temp_rect.left-LINE_WIDTH,temp_rect.top+bar_height );
  72. line(temp_rect.left+bar_height,temp_rect.top,temp_rect.left+bar_height,temp_rect.top-LINE_WIDTH );
  73. line(temp_rect.right,temp_rect.top+bar_height,temp_rect.right+LINE_WIDTH,temp_rect.top+bar_height );
  74. line(temp_rect.right-bar_height,temp_rect.top,temp_rect.right-bar_height,temp_rect.top-LINE_WIDTH );
  75. line(temp_rect.right,temp_rect.bottom-bar_height,temp_rect.right+LINE_WIDTH,temp_rect.bottom-bar_height );
  76. line(temp_rect.right-bar_height,temp_rect.bottom,temp_rect.right-bar_height,temp_rect.bottom+LINE_WIDTH );
  77. line(temp_rect.left,temp_rect.bottom-bar_height,temp_rect.left-LINE_WIDTH,temp_rect.bottom-bar_height );
  78. line(temp_rect.left+bar_height,temp_rect.bottom,temp_rect.left+bar_height,temp_rect.bottom+LINE_WIDTH );
  79. line(temp_rect.left,temp_rect.top+bar_height,temp_rect.right,temp_rect.top+bar_height);
  80. }
  81. void  draw_win_frame_rect_and_others(Rect& Arect,char *title,
  82. int color1,int color2 )
  83. {
  84. draw_win_frame_rect (Arect);
  85. Rect tmprect,tmp2rect;
  86. // SetRect (&tmp2rect,Arect.left,Arect.top,Arect.right,Arect.bottom);
  87. tmp2rect =Arect;
  88. InsetRect (&tmp2rect,-LINE_WIDTH,-LINE_WIDTH );
  89. // draw sysmenu
  90. SetRect (&tmprect,tmp2rect.left,tmp2rect.top,tmp2rect.left+bar_height-1,
  91. tmp2rect.top+bar_height-1);
  92. FrameRect (tmprect);
  93. InsetRect (&tmprect ,-1,-1);
  94. FillRect (tmprect,LIGHTGRAY );
  95. setcolor (DARKGRAY);
  96. moveto
  97. (tmprect.left+5,tmprect.top);
  98.   char minus[]="-";
  99. outtext (minus);
  100. //  draw up & down rect;
  101.   Rect up_rect,down_rect;
  102. down_rect =tmp2rect;
  103. down_rect.left =down_rect.right -bar_height+1;
  104. down_rect.right -=1;
  105. down_rect.bottom =down_rect.top+bar_height-1;
  106. OffsetRect (&down_rect,LINE_WIDTH-1,0 );
  107. up_rect=down_rect;
  108. OffsetRect (&up_rect, -bar_height+1,0 );
  109. draw_out_button (down_rect);
  110. draw_out_button (up_rect);
  111. draw_arrow (down_rect.left,down_rect.top,down_rect.right-LINE_WIDTH,
  112. down_rect.bottom,DOWN,BLACK);
  113. draw_arrow (up_rect.left,up_rect.top,up_rect.right-LINE_WIDTH,
  114. up_rect.bottom,UP,BLACK);
  115. //draw text
  116.     tmprect.top -=1;
  117. tmprect.left +=bar_height-1;
  118. tmprect.right =tmp2rect.right-2*bar_height+2;
  119. tmprect.bottom +=1;
  120. FillRect (tmprect,color1);
  121. setcolor (color2 );
  122. moveto ( tmprect.left +  ( tmprect.right-tmprect.left ) /2 -
  123. textwidth (title ) /2 ,
  124.  tmprect.top);
  125. outtext (title);
  126. }
  127. void draw_arrow ( int left, int top, int right, int bottom, int direct,int color )
  128. {
  129. int xx [ 6 ];
  130. int le, to, ri, bo;
  131. int mini_size;
  132. int hlen, vlen;
  133. hlen = right - left;
  134. vlen = bottom - top;
  135. mini_size = ( hlen < vlen ) ? hlen : vlen;
  136. int base = mini_size / 6;
  137. int ox, oy;
  138. xx [ 0 ] = xx [ 2 ] = xx [ 4 ] = ox = ( right + left ) / 2;
  139. xx [ 1 ] = xx [ 3 ] = xx [ 5 ] = oy = ( top + bottom ) / 2;
  140. switch ( direct )
  141. {
  142. case 1:
  143. xx [ 1 ] -= base;
  144. xx [ 3 ] += base;
  145. xx [ 5 ] += base;
  146. xx [ 2 ] -= base;
  147. xx [ 2 ] -= base;
  148. xx [ 4 ] += base;
  149. xx [ 4 ] += base;
  150. break;
  151. case 2:
  152. xx [ 0 ] += base;
  153. xx [ 2 ] -= base;
  154. xx [ 4 ] -= base;
  155. xx [ 3 ] -= base;
  156. xx [ 3 ] -= base;
  157. xx [ 5 ] += base;
  158. xx [ 5 ] += base;
  159. break;
  160. case 3:
  161. xx [ 1 ] += base;
  162. xx [ 3 ] -= base;
  163. xx [ 5 ] -= base;
  164. xx [ 2 ] -= base;
  165. xx [ 2 ] -= base;
  166. xx [ 4 ] += base;
  167. xx [ 4 ] += base;
  168. break;
  169. default:
  170. xx [ 0 ] -= base;
  171. xx [ 2 ] += base;
  172. xx [ 4 ] += base;
  173. xx [ 3 ] -= base;
  174. xx [ 3 ] -= base;
  175. xx [ 5 ] += base;
  176. xx [ 5 ] += base;
  177. }
  178. setfillstyle ( SOLID_FILL, color );
  179. setlinestyle ( SOLID_LINE, 0x1, NORM_WIDTH );
  180. rectangle ( left, top, right, bottom );
  181. fillpoly ( 3, xx );
  182. }