// ============================================================================================== // 函数功能:针对九格显示的显示参数 // 输入参数: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; }
// ============================================================================================== // 函数功能:针对水平显示的显示参数进行触摸的反应 // 输入参数: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; }
// ========================================================================= // 函数功能:下键响应函数 // 输入参数: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; }