windows.c
上传用户:zfj3589
上传日期:2022-07-13
资源大小:635k
文件大小:4k
源码类别:

微处理器开发

开发平台:

C/C++

  1. /****************************************************************************************
  2. * 文件名:WINDOW.C
  3. * 功能:窗口管理。将进行各种窗口的给制及窗口内部控制。
  4. * 作者:黄绍斌
  5. * 日期:2004.02.26
  6. * 备注:
  7. ****************************************************************************************/
  8. #include "config.h"
  9. #if  GUI_WINDOW_EN==1
  10. /****************************************************************************
  11. * 名称:GUI_WindowsDraw()
  12. * 功能:显示窗口。根据提供的窗口参数进行画窗口。
  13. * 入口参数:win 窗口句柄
  14. * 出口参数:返回0表示操作失败,返回1表示操作成功
  15. ****************************************************************************/
  16. uint8  GUI_WindowsDraw(WINDOWS *win)
  17. {  uint8  *str;
  18.    int32  bak, bak1, bak2;
  19.    
  20.    /* 参数过滤,若窗口起出范围,则返回0 */
  21.    if( ( (win->with)<20 ) || ( (win->hight)<20 ) ) return(0); // 宽度、高度检查,限制最小窗口
  22.    if( (win->x + win->with ) > GUI_LCM_XMAX ) return(0); // 窗口宽度是否溢出
  23.    if( (win->y + win->hight ) > GUI_LCM_YMAX ) return(0); // 窗口高度是否溢出
  24.     
  25.    /* 开始画窗口 */
  26.    GUI_RectangleFill(win->x, win->y, win->x + win->with - 1, win->y + win->hight - 1, back_color);
  27.    GUI_Rectangle(win->x, win->y, win->x + win->with - 1, win->y + win->hight - 1, disp_color); // 画窗口
  28.    GUI_HLine(win->x, win->y + 12, win->x + win->with - 1, disp_color); // 画标题目栏
  29.    GUI_RLine(win->x + 12, win->y, win->y + 12, disp_color); // 画关闭窗号按钮
  30.    GUI_Line(win->x, win->y, win->x + 12, win->y + 12, disp_color);
  31.    GUI_Line(win->x + 12, win->y, win->x, win->y + 12, disp_color);
  32.    
  33.    /* 写标题 */
  34.    if( win->title != NULL ) 
  35.    {  str = win->title;
  36.       bak = win->x + 15;
  37.       bak1 = win->y + 3;
  38.       bak2 = win->x + win->with -1;
  39.      
  40.       while(1)
  41.       {  if( (bak+8) > bak2 ) break; // 判断标题是否溢出
  42.          if(*str=='') break; // 判断字符串是否结束
  43.          
  44.          GUI_PutChar(bak, bak1, *str++); // 显示标题
  45.          bak += 6;
  46.       }
  47.    }
  48.    /* 写状态栏 */
  49.    if( win->state != NULL )
  50.    {  if( win->hight < 60) return(0); // 判断是否可以画状态栏
  51.       /* 画状态栏 */
  52.       GUI_HLine(win->x, win->y + win->hight - 11, win->x + win->with - 1, disp_color);
  53.       
  54.       str = win->state;
  55.       bak = win->x + 3;
  56.       bak1 = win->y + win->hight - 9;
  57.       bak2 = win->x + win->with -1;
  58.       
  59.       while(1)
  60.       {  if( (bak+8) > bak2 ) break; // 判断标题是否溢出
  61.          if(*str=='') break; // 判断字符串是否结束
  62.          
  63.          GUI_PutChar(bak, bak1, *str++); // 显示标题
  64.          bak += 6;
  65.       }      
  66.    }
  67.    
  68.    return(1);
  69. }
  70. /****************************************************************************
  71. * 名称:GUI_WindowsHide()
  72. * 功能:消隐窗口。
  73. * 入口参数:win 窗口句柄
  74. * 出口参数:返回0表示操作失败,返回1表示操作成功
  75. ****************************************************************************/
  76. uint8  GUI_WindowsHide(WINDOWS *win)
  77. {  /* 参数过滤,若窗口起出范围,则返回0 */
  78.    if( ( (win->with)<20 ) || ( (win->hight)<20 ) ) return(0); // 宽度、高度检查,限制最小窗口
  79.    if( (win->x + win->with ) > GUI_LCM_XMAX ) return(0); // 窗口宽度是否溢出
  80.    if( (win->y + win->hight ) > GUI_LCM_YMAX ) return(0); // 窗口高度是否溢出
  81.     
  82.    /* 消隐窗口 */
  83.    GUI_RectangleFill(win->x, win->y, win->x + win->with - 1, win->y + win->hight - 1, back_color);
  84.    return(1);
  85. }
  86. /****************************************************************************
  87. * 名称:GUI_WindowsClr()
  88. * 功能:清屏窗口。
  89. * 入口参数:win 窗口句柄
  90. * 出口参数:无
  91. * 说明:使用此函数前要先使用GUI_WindowsDraw()将窗口画出。
  92. ****************************************************************************/
  93. void  GUI_WindowsClr(WINDOWS *win)
  94. {  uint8  x0, y0;
  95.    uint8  x1, y1;
  96.  
  97.    /* 设置要清屏的区域 */
  98.    x0 = win->x + 1;
  99.    x1 = win->x + win->with - 2;
  100.    y0 = win->y + 13;
  101.    y1 = win->y + win->hight - 2;
  102.    if( win->state != NULL ) // 判断是否有状态栏
  103.    {  if( win->hight >= 60)
  104.       {  y1 = win->y + win->hight - 12;
  105.       }
  106.    }
  107.    /* 使用填充矩形实现清屏 */
  108.    GUI_RectangleFill(x0, y0, x1, y1, back_color);
  109. }
  110. #endif