Пример #1
0
// ==============================================================================================
// 函数功能:针对九格显示的显示参数
// 输入参数:operatingDispara,当前正在操作的显示参数,myCoordinatePoint,鼠标或者触摸的坐标
// 输出参数:
// 返回值  :经过更新的当前正在操作的菜单项
// 说明    :切换到相应的坐标的菜单项。(目前只支持在菜单之间的切换,不包括菜单项的展开和返回)
// ==============================================================================================
struct menu_displaypara *touchlcdaction3by3(struct menu_displaypara *operatingDispara,\
                                            struct coordinate_point myCoordinatePoint)
{
    struct tagRectangle  temp_rec={0,0,0,0};
    s8              menuNum=0,menuitemNumber=0;
    s8              step=0;//跳转的步长
    s8              FNumber=0;
    s8              ONumber=0;
    s8              Line=0;
    s8              Row=0;

   //内部使用,不用做参数检查
    temp_rec.left=operatingDispara->CurWin->absx0;
    temp_rec.right=operatingDispara->CurWin->absx0+operatingDispara->CurWin->right-operatingDispara->CurWin->left;
    temp_rec.top=operatingDispara->CurWin->absy0;
    temp_rec.bottom=operatingDispara->CurWin->absy0+operatingDispara->CurWin->bottom-operatingDispara->CurWin->top;
    if(JudgeCoordinatePointInRec(temp_rec,myCoordinatePoint))//先看是否在窗口内,不是的话什么也不做
    {
       menuNum=CalDisBettween2Menuitem(operatingDispara->FVisualMenuitem,operatingDispara->LVisualMenuitem)+1;
       temp_rec.left+=(operatingDispara->CurWin->right-operatingDispara->CurWin->left-cn_space_margin)/2-(operatingDispara->MenuitemSpace.width*3)/2;;
       temp_rec.top+=(operatingDispara->CurWin->bottom-operatingDispara->CurWin->top-cn_space_margin)/2-(operatingDispara->MenuitemSpace.height*3)/2;
       temp_rec.right=temp_rec.left+operatingDispara->MenuitemSpace.width*3+cn_space_margin;
       temp_rec.bottom=temp_rec.top+operatingDispara->MenuitemSpace.height*3+cn_space_margin;
       if(JudgeCoordinatePointInRec(temp_rec,myCoordinatePoint))//看是否在窗口的可视区域内,否则什么都不用做
       {
           //看看落在第几个菜单项,从第一个可视菜单项算起
           if((operatingDispara->MenuitemSpace.height!=0)&&(0!=operatingDispara->MenuitemSpace.width))
           {
               //之所以-1,是因为我们算的是距离第一个可视菜单项的位置
               Line=((myCoordinatePoint.y-temp_rec.top)-cn_space_margin/2)/(operatingDispara->MenuitemSpace.height);
               Row=((myCoordinatePoint.x-temp_rec.left)-cn_space_margin/2)/(operatingDispara->MenuitemSpace.width);
               menuitemNumber=CalDisBettween2Menuitem(operatingDispara->FVisualMenuitem,operatingDispara->LVisualMenuitem);
               if((Line*3+Row)<=menuitemNumber)//在可视菜单项中
               {
                   FNumber=CalMenuitemNumber(operatingDispara->FVisualMenuitem);
                   ONumber=CalMenuitemNumber(operatingDispara->OperatingMenuitem);
                   step=FNumber+Line*3+Row-ONumber;
               //    printf("Fnumber=%d,Onumber=%d, L=%d R=%d menuitemnumber=%d step=%d\n",FNumber,ONumber,Line,Row,\
               //          menuitemNumber,step);
                   goto_menuitem_inslayers(operatingDispara,step);
               }
           }
           else
           {
//             return operatingDispara;
           }

       }
       else
       {
//         return operatingDispara;
       }
    }
    else
    {
//      return operatingDispara;
    }
    return operatingDispara;
}
Пример #2
0
// ==============================================================================================
// 函数功能:针对水平显示的显示参数进行触摸的反应
// 输入参数:operatingDispara,当前正在操作的显示参数,myCoordinatePoint,鼠标或者触摸的坐标
// 输出参数:
// 返回值  :经过更新的当前正在操作的菜单项
// 说明    :切换到相应的坐标的菜单项。(目前只支持在菜单之间的切换,不包括菜单项的展开和返回)
// ==============================================================================================
struct menu_displaypara *touchlcdactionhorizontal(struct menu_displaypara *operatingDispara,\
                                                  struct coordinate_point myCoordinatePoint)
{

    u8              menuNum=0,menuitemNumber=0;
    s8              step=0;//跳转的步长
    u8              FNumber=0;
    u8              ONumber=0;
    struct tagRectangle  temp_rec={0,0,0,0};
    //内部使用,不用做参数检查


    temp_rec.left=operatingDispara->CurWin->absx0;
    temp_rec.right=operatingDispara->CurWin->absx0+operatingDispara->CurWin->right-operatingDispara->CurWin->left;
    temp_rec.top=operatingDispara->CurWin->absy0;
    temp_rec.bottom=operatingDispara->CurWin->absy0+operatingDispara->CurWin->bottom-operatingDispara->CurWin->top;
    if(JudgeCoordinatePointInRec(temp_rec,myCoordinatePoint))//先看是否在窗口内,不是的话什么也不做
    {
       menuNum=CalDisBettween2Menuitem(operatingDispara->FVisualMenuitem,operatingDispara->LVisualMenuitem)+1;
       temp_rec.left+=cn_space_margin/4;
       temp_rec.top+=cn_space_margin/4;
       temp_rec.right=temp_rec.left+menuNum*(operatingDispara->MenuitemSpace.width);
       temp_rec.bottom=temp_rec.top+operatingDispara->MenuitemSpace.height;
       if(JudgeCoordinatePointInRec(temp_rec,myCoordinatePoint))//看是否在窗口的可视区域内,否则什么都不用做
       {
           //看看落在第几个菜单项,从第一个可视菜单项算起
           if(operatingDispara->MenuitemSpace.width!=0)
           {
               //之所以-1,是因为我们算的是距离第一个可视菜单项的位置
               menuitemNumber=((myCoordinatePoint.x-temp_rec.left)-1)/(operatingDispara->MenuitemSpace.width);
               //
               FNumber=CalMenuitemNumber(operatingDispara->FVisualMenuitem);
               ONumber=CalMenuitemNumber(operatingDispara->OperatingMenuitem);
               step=FNumber+menuitemNumber-ONumber;
           //    printf("Fnumber=%d,Onumber=%d,menuitemnumber=%d step=%d\n",FNumber,ONumber,menuitemNumber,step);
               goto_menuitem_inslayers(operatingDispara,step);
           }
           else
           {
//             return operatingDispara;
           }

       }
       else
       {
//         return operatingDispara;
       }
    }
    else
    {
//      return operatingDispara;
    }
    return operatingDispara;
}
Пример #3
0
// =========================================================================
// 函数功能:下键响应函数
// 输入参数:operatingDispara,当前正在操作的菜单项
// 输出参数:
// 返回值    :经过更新的当前正在操作的菜单项
// 说明        :在九宫格中,对于下键,主菜单会向后返回三个,子菜单会切换到后面一个菜单项
// =========================================================================
struct menu_displaypara* KeyDownAction_9cell(struct menu_displaypara *operatingDispara)
{
  if(NULL==operatingDispara->pre)//主菜单
  {
    goto_menuitem_inslayers(operatingDispara, 3);
  }
  else//子菜单
  {
    goto_nextmenuitem(operatingDispara);
  }

  return operatingDispara;
}