Ejemplo n.º 1
0
/****************************************************************************
* 名称:GUI_LoadPic1()
* 功能:输出单色图形数据,反相显示。
* 入口参数: x		指定显示位置,x坐标
*           y		指定显示位置,y坐标
*           dat		要输出显示的数据。
*           hno     要显示此行的点个数
*           lno     要显示此列的点个数
* 出口参数:无
* 说明:操作失败原因是指定地址超出有效范围。
****************************************************************************/
void  GUI_LoadPic1(uint32 x, uint32 y, uint8 *dat, uint32 hno, uint32 lno)
{  uint32  i;
   
   GUI_ExchangeColor();									// 显示色与背景色交换
   for(i=0; i<lno; i++)
   {  GUI_LoadLine(x, y, dat, hno);						// 输出一行数据
      y++;												// 显示下一行
      dat += (hno>>3);									// 计算下一行的数据
      if( (hno&0x07)!=0 ) dat++;
   }
   GUI_ExchangeColor();
   
}
Ejemplo n.º 2
0
/****************************************************************************
* 名称:GUI_SMenuSelect()
* 功能:选择新的子菜单。
* 入口参数:men     子菜单句柄
*          old_no   原先选择的子菜单项
*          new_no   现要选择的子菜单项
* 出口参数:无
****************************************************************************/
void  GUI_SMenuSelect(SMENU *men, uint8 old_no, uint8 new_no)
{
    WINDOWS  *mwin;
    uint8  xx, yy;

    /* 参数过滤 */
    if(old_no==new_no) return;
    xx = men->no;
    if( (old_no>xx) || (new_no>xx) ) return;

    /* 设置新的选择的子菜单项 */
    men->state = new_no;

    /* 进行菜单反相显示 */
    mwin = men->win;
    xx = mwin->x;
    xx +=  (men->mmenu_no)*MMENU_WIDTH;
    if( (xx+SMENU_WIDTH) > (mwin->x + mwin->with - 1) )
    {
        /* 以右下拉为原则显示子菜单,所以xx设置在左端 */
        xx = xx-(SMENU_WIDTH-MMENU_WIDTH);
    }
    xx++;

    /* 取消原子菜单选择 */
    yy = mwin->y + 22 + 2;
    yy += old_no*11;
    GUI_RectangleFill(xx, yy, xx+SMENU_WIDTH-2, yy+10, back_color);
    GUI_PutNoStr(xx+1, yy+1, men->str[old_no], 8);
    /* 选择新的子菜单 */
    yy = mwin->y + 22 + 2;
    yy += new_no*11;
    GUI_RectangleFill(xx, yy, xx+SMENU_WIDTH-2, yy+10, disp_color);
    GUI_ExchangeColor();
    GUI_PutNoStr(xx+1, yy+1, men->str[new_no], 8);
    GUI_ExchangeColor();
}
Ejemplo n.º 3
0
/****************************************************************************
* 名称:GUI_SMenuDraw()
* 功能:显示子菜单,加上边框。
* 入口参数:men     子菜单句柄
* 出口参数:返回0表示操作失败,返回1表示操作成功
****************************************************************************/
uint8  GUI_SMenuDraw(SMENU *men)
{
    WINDOWS  *mwin;
    uint32   xx, yy;
    uint8    i;

    mwin = men->win;
    /* 判断是否可以显示主菜单 */
    if( (mwin->hight)<50 ) return(0);
    if( (mwin->with)<50 ) return(0);

    /* 画菜子单项。下拉子菜单,以向左下拉为原则,若右边溢出则以右下拉显示 */
    xx = mwin->x;
    xx += (men->mmenu_no)*MMENU_WIDTH;
    yy = mwin->y + 22;
    yy +=  (men->no) * 11 + 2;
    if( (xx+SMENU_WIDTH) <= (mwin->x + mwin->with - 1) )
    {
        /* 以左下拉为原则显示子菜单 */
        if( (men->mmenu_no) == 0 )
        {
            GUI_RLine(xx+SMENU_WIDTH, mwin->y + 22, yy, disp_color);
            GUI_HLine(xx, yy, xx+SMENU_WIDTH, disp_color);
        }
        else
        {
            GUI_Rectangle(xx, mwin->y + 22, xx+SMENU_WIDTH, yy, disp_color);
        }
        GUI_HLine(xx+1, mwin->y + 22, xx+MMENU_WIDTH-1, back_color);

    }
    else
    {
        /* 以右下拉为原则 */
        if( (xx+MMENU_WIDTH) == (mwin->x + mwin->with - 1) )
        {
            GUI_RLine(xx-(SMENU_WIDTH-MMENU_WIDTH), mwin->y + 22, yy, disp_color);
            GUI_HLine(xx-(SMENU_WIDTH-MMENU_WIDTH), yy, xx+MMENU_WIDTH, disp_color);

        }
        else
        {
            GUI_Rectangle(xx-(SMENU_WIDTH-MMENU_WIDTH), mwin->y + 22, xx+MMENU_WIDTH, yy, disp_color);
        }
        GUI_HLine(xx+1, mwin->y + 22, xx+MMENU_WIDTH-1, back_color);

        xx = xx-(SMENU_WIDTH-MMENU_WIDTH);
    }

    /* 显示菜单文字 */
    xx++;
    yy = mwin->y + 22 + 2;
    for(i=0; i<(men->no); i++)
    {
        if( i == (men->state) )                               // 判断所选择的菜单项
        {
            /* 显示背景色 */
            GUI_RectangleFill(xx, yy, xx+SMENU_WIDTH-2, yy+10, disp_color);
            /* 显示菜单字符 */
            GUI_ExchangeColor();
            GUI_PutNoStr(xx+1, yy+1, men->str[i], 8);          // 书写子菜单文字
            GUI_ExchangeColor();
        }
        else
        {
            /* 显示背景色 */
            GUI_RectangleFill(xx, yy, xx+SMENU_WIDTH-2, yy+10, back_color);
            /* 显示菜单字符 */
            GUI_PutNoStr(xx+1, yy+1, men->str[i], 8);          // 书写子菜单文字
        }

        yy += 11;
    }

    return(1);
}