menuGUI.h
上传用户:wealth48
上传日期:2022-06-24
资源大小:1701k
文件大小:7k
源码类别:

uCOS

开发平台:

C/C++

  1. #include  "../src/gui/gui.h"
  2. #include "drv/klcd.h"
  3. //--------------------菜单控件位置------------------------------------
  4. structRECT staticRect[4]; //静态
  5. structRECT movingRect[30];//动态 
  6. structRECT menuRect;//菜单框
  7. //-------------------------Gobal变量-------------------------------------
  8. int GuiState = 0;//界面状态:0代表启动界面,1代表菜单1界面,2代表菜单2界面
  9. int menu1Pos = 0;//菜单1位置
  10. int menu2Pos = 0;//菜单2位置
  11. extern U16* pbuf;
  12. U16 *LcdTempBuf;
  13. U16 *mainMenuBMP;
  14. U16 *menuList1BMP;
  15. U16 *numBMP[10];
  16. U16 *markBMP;
  17. U16 *cancalMarkBMP;
  18. U16 *startBMP;
  19. U16 *start1BMP;
  20. U16 *bootBMP[4];
  21. U16 *thanksBMP;
  22. U16 *endBMP;
  23. int bootFlag = 1;
  24. //------------------------------------------------------------------------
  25. void InitRect(){
  26. int i;
  27. GuiState = 1;//测试
  28. menuRect.left=80;//菜单框
  29. menuRect.top=80;
  30. menuRect.right=559;
  31. menuRect.bottom=409;
  32. staticRect[0].left=8;//上一页
  33. staticRect[0].top=216;
  34. staticRect[0].right=50;
  35. staticRect[0].bottom=260;
  36. staticRect[1].left=588;//下一页
  37. staticRect[1].top=218;
  38. staticRect[1].right=632;
  39. staticRect[1].bottom=263;
  40. staticRect[2].left=116;//  确认
  41. staticRect[2].top=435;
  42. staticRect[2].right=268;
  43. staticRect[2].bottom=471;
  44. staticRect[3].left=605;// 关闭
  45. staticRect[3].top=0;
  46. staticRect[3].right=639;
  47. staticRect[3].bottom=33;
  48. for(i = 0;i < 25;i++){
  49. movingRect[i].left=100;
  50. movingRect[i].top=91 + 70*i;
  51. movingRect[i].right=200;
  52. movingRect[i].bottom=91 + 70*i + 67;
  53. }
  54. }
  55. //--------------------------------ChoiceWhat---------------------------------------
  56.  
  57.  
  58.  
  59. int ChoiceWhat(int x,int y){
  60. structRECT tempRect;
  61. int i;
  62. switch(GuiState){
  63. case 0:return 100;
  64. case 1:for(i = 0;i < 4;i++)
  65. if(IsInRect(&staticRect[i],x,y)) return 30+i;
  66.    for(i = 0;i < 25;i++){
  67.     if(!IsInRect(&menuRect,x,y))return 100;
  68.     tempRect.left = 100;
  69.     tempRect.top = movingRect[i].top -menu1Pos;
  70.     tempRect.right = 200;
  71.     tempRect.bottom = movingRect[i].bottom -menu1Pos;
  72.     if(IsInRect(&tempRect,x,y))return i;
  73.    }
  74. case 2:return 100;
  75. }
  76. }
  77. //---------------------------------滚动菜单----------------------------------
  78. void ScrollMenu(int distance){
  79. if(menu1Pos + distance <= 0&&distance < 0)distance = -menu1Pos;
  80. if(menu1Pos + distance >= 1500&& distance > 0)distance = 1500 - menu1Pos;
  81. pbuf = menuList1BMP + menu1Pos*kLCDWIDTH;
  82. pbuf += kLCDWIDTH * distance;
  83. menu1Pos += distance;
  84. kLCD_Part_Refresh(81,82,559,409);
  85. }
  86. //-----------------------------------初始化菜单------------------------------
  87. void InitMenuGUI(){
  88. int i;
  89. LcdTempBuf = malloc(2 * 640 * 480);
  90. mainMenuBMP = malloc(2 * 640 * 480);
  91. menuList1BMP = malloc(2 * 640*2000);
  92. numBMP[0] = malloc(2 * 72 * 67);
  93. numBMP[1] = malloc(2 * 72 * 67);
  94. numBMP[2] = malloc(2 * 72 * 67);
  95. numBMP[3] = malloc(2 * 72 * 67);
  96. numBMP[4] = malloc(2 * 72 * 67);
  97. numBMP[5] = malloc(2 * 72 * 67);
  98. numBMP[6] = malloc(2 * 72 * 67);
  99. numBMP[7] = malloc(2 * 72 * 67);
  100. numBMP[8] = malloc(2 * 72 * 67);
  101. numBMP[9] = malloc(2 * 72 * 67);
  102. markBMP = malloc(2 * 72 * 67);
  103. cancalMarkBMP = malloc(2 * 72 * 67);
  104. thanksBMP = malloc(2 * 328 * 86);
  105. endBMP = malloc(2 * 640 * 480);
  106. InitRect();
  107. LoadBMP(mainMenuBMP,"/sys/ucos/e-menu/mainMenu.bmp",640,480);
  108. LoadBMP(menuList1BMP,"/sys/ucos/e-menu/menuList.bmp",640,2000);
  109. LoadBMP(markBMP,"/sys/ucos/e-menu/mark.bmp",72,67);
  110. LoadBMP(cancalMarkBMP,"/sys/ucos/e-menu/cancalMark.bmp",72,67);
  111. LoadBMP(endBMP,"/sys/ucos/e-menu/end.bmp",640,480);
  112. //---------------------------------------------------
  113. LoadBMP(numBMP[0],"/sys/ucos/e-menu/0.bmp",72,67);
  114. LoadBMP(numBMP[1],"/sys/ucos/e-menu/1.bmp",72,67);
  115. LoadBMP(numBMP[2],"/sys/ucos/e-menu/2.bmp",72,67);
  116. LoadBMP(numBMP[3],"/sys/ucos/e-menu/3.bmp",72,67);
  117. LoadBMP(numBMP[4],"/sys/ucos/e-menu/4.bmp",72,67);
  118. LoadBMP(numBMP[5],"/sys/ucos/e-menu/5.bmp",72,67);
  119. LoadBMP(numBMP[6],"/sys/ucos/e-menu/6.bmp",72,67);
  120. LoadBMP(numBMP[7],"/sys/ucos/e-menu/7.bmp",72,67);
  121. LoadBMP(numBMP[8],"/sys/ucos/e-menu/8.bmp",72,67);
  122. LoadBMP(numBMP[9],"/sys/ucos/e-menu/9.bmp",72,67);
  123. //------------------------------------------------------
  124. LoadBMP(thanksBMP,"/sys/ucos/e-menu/thanks.bmp",328,86);
  125. bootFlag = 0;
  126. OSTimeDly(100);
  127. pbuf = LcdTempBuf;
  128. ClreaLCD();
  129. kLCD_Refresh();
  130. pbuf = mainMenuBMP;
  131. for(i = 320;i >= 0;i -= 5){
  132. kLCD_Part_Refresh(i,i*3/4,640 - i,480 - i*3/4);
  133. }
  134. kLCD_Refresh();
  135. ScrollMenu(0);
  136. }
  137. //-----------------------------------标志已选菜----------------------------------
  138. void Mark(int index){
  139. PaintBMP(pbuf,markBMP,192,movingRect[index].top - menu1Pos,72,67);
  140. kLCD_Part_Refresh(81,82,559,409);
  141. }
  142. //-----------------------------------取消标志------------------------------------
  143. void CancalMark(int index){
  144. PaintBMP(pbuf,cancalMarkBMP,192,movingRect[index].top - menu1Pos,72,67);
  145. kLCD_Part_Refresh(81,82,559,409);
  146. }
  147. //-----------------------------------显示数字------------------------------------
  148. void ShowNum(int x,int y,int num){
  149. int first_Nzero_flag = 0;
  150. int i = 0;
  151. pbuf = mainMenuBMP;
  152. kLCD_Part_Refresh(420,400,640,480);
  153. pbuf = LcdTempBuf;
  154. if(first_Nzero_flag|(num/10000)){
  155. first_Nzero_flag = 1;
  156. Uart_Printf(0,"%d",num/10000);
  157. PaintBMP(pbuf,numBMP[num/10000],x+i*31,y,72,67);
  158. kLCD_Part_Refresh(x+i*31,y,x+(i+1)*31,y+46);
  159. i++;
  160. }
  161. if(first_Nzero_flag|((num%10000)/1000)){
  162. first_Nzero_flag = 1;
  163. PaintBMP(pbuf,numBMP[(num%10000)/1000],x+i*31,y,72,67);
  164. kLCD_Part_Refresh(x+i*31,y,x+(i+1)*31,y+46);
  165. i++;
  166. Uart_Printf(0,"%d",(num%10000)/1000);
  167. }
  168. if(first_Nzero_flag|((num%1000)/100)){
  169. first_Nzero_flag = 1;
  170. PaintBMP(pbuf,numBMP[(num%1000)/100],x+i*31,y,72,67);
  171. kLCD_Part_Refresh(x+i*31,y,x+(i+1)*31,y+46);
  172. Uart_Printf(0,"%d",(num%1000)/100);
  173. i++;
  174. }
  175. if(first_Nzero_flag|((num%100)/10)){
  176. first_Nzero_flag = 1;
  177. PaintBMP(pbuf,numBMP[(num%100)/10],x+i*31,y,72,67);
  178. kLCD_Part_Refresh(x+i*31,y,x+(i+1)*31,y+46);
  179. Uart_Printf(0,"%d",(num%100)/10);
  180. i++;
  181. }
  182. PaintBMP(pbuf,numBMP[num%10],x+i*31,y,72,67);
  183. kLCD_Part_Refresh(x+i*31,y,x+(i+1)*31,y+46);
  184. Uart_Printf(0,"%d",num%10);
  185. Uart_Printf(0,"I:%d",i);
  186. pbuf = menuList1BMP + menu1Pos*kLCDWIDTH; 
  187. }
  188. //-----------------------------------------点菜结束--------------------------------------------
  189. void EndSelect(){
  190. pbuf = LcdTempBuf;
  191. PaintBMP(pbuf,mainMenuBMP,0,0,640,480);
  192. PaintBMP(pbuf,thanksBMP,160,208,328,86);
  193. kLCD_Part_Refresh(81,82,559,409);
  194. pbuf = menuList1BMP;
  195. menu1Pos = 0;
  196. OSTimeDly(2000);
  197. }
  198. void CloseImage(){
  199. int i;
  200. pbuf = endBMP;
  201. for(i = 0;i <= 320;i += 8)
  202. {
  203. kLCD_Part_Refresh(0,0,640 - i,i*3/4);
  204. kLCD_Part_Refresh(640 - i,0,640,480-i*3/4);
  205. kLCD_Part_Refresh(i,480 - i*3/4,640,480);
  206. kLCD_Part_Refresh(0,i*3/4,i,480);
  207. }
  208. OSTimeDly(2000);
  209. pbuf = LcdTempBuf;
  210. ClreaLCD();
  211. kLCD_Refresh();
  212. }