STemWin 窗口中的按键怎么与触摸屏坐标对应?

2019-03-23 17:25发布

STemWin窗口中的按键是怎么与触摸屏坐标对应?窗口中显示一个按钮,当触摸该按钮时,怎么知道该按钮按下?
此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
2条回答
dageliu
2019-03-24 05:56
DavidZH 发表于 2017-11-8 18:13
有事件的

我在窗口上放了一个按钮,但触摸该按钮时一直没反应,直接显示触摸点数据是没问题的,是不是我哪里配置有问题呀?看别的例程里都没有添加WM_TOUCH事件消息。我的代码如下,
  1. #include "DIALOG.h"
  2. #include "stdio.h"
  3. #include "math.h"
  4. /*********************************************************************
  5. *
  6. *       Defines
  7. *
  8. **********************************************************************
  9. */
  10. #define ID_WINDOW_0  (GUI_ID_USER + 0x00)
  11. #define ID_BUTTON_0  (GUI_ID_USER + 0x01)
  12. #define ID_BUTTON_1  (GUI_ID_USER + 0x02)
  13. #define ID_BUTTON_2  (GUI_ID_USER + 0x03)
  14. #define ID_TEXT_1    (GUI_ID_USER + 0x04)
  15. #define ID_TEXT_2    (GUI_ID_USER + 0x05)

  16. extern GUI_CONST_STORAGE GUI_FONT GUI_FontsongFont16;
  17. extern int abs(int);

  18. // USER START (Optionally insert additional defines)
  19. /*void GUI_intToString(int num,char *s)
  20. {
  21.         int temp,i;
  22.         i = 0;
  23.         if(num == 0)
  24.         {
  25.                 *s = '0';
  26.         }
  27.         else if(num<0)
  28.         {
  29.                 temp=abs(num);
  30.                 *s = '-';
  31.                 s++;
  32.                 i++;
  33.         }
  34.         while(num!=0)
  35.         {
  36.                 temp=num%10;
  37.                 switch (temp){
  38.                         case 0:
  39.                                 *s = '0';
  40.                                 s++;
  41.                                 i++;
  42.                                 break;
  43.                         case 1:
  44.                                 *s = '1';
  45.                                 s++;
  46.                                 i++;
  47.                                 break;
  48.                         case 2:
  49.                                 *s = '2';
  50.                                 s++;
  51.                                 i++;
  52.                                 break;
  53.                         case 3:
  54.                                 *s = '3';
  55.                                 s++;
  56.                                 i++;
  57.                                 break;
  58.                         case 4:
  59.                                 *s = '4';
  60.                                 s++;
  61.                                 i++;
  62.                                 break;
  63.                         case 5:
  64.                                 *s = '5';
  65.                                 s++;
  66.                                 i++;
  67.                                 break;
  68.                         case 6:
  69.                                 *s = '6';
  70.                                 s++;
  71.                                 i++;
  72.                                 break;
  73.                         case 7:
  74.                                 *s = '7';
  75.                                 s++;
  76.                                 i++;
  77.                                 break;
  78.                         case 8:
  79.                                 *s = '8';
  80.                                 s++;
  81.                                 i++;
  82.                                 break;
  83.                         case 9:
  84.                                 *s = '9';
  85.                                 s++;
  86.                                 i++;
  87.                                 break;
  88.                         default :
  89.                                 break;
  90.                 }
  91.         }
  92. }*/
  93.                
  94. // USER END

  95. /*********************************************************************
  96. *
  97. *       Static data
  98. *
  99. **********************************************************************
  100. */

  101. // USER START (Optionally insert additional static data)
  102. // USER END

  103. /*********************************************************************
  104. *
  105. *       _aDialogCreate
  106. */
  107. static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] = {
  108.   { WINDOW_CreateIndirect, "Window", ID_WINDOW_0, 0, 0, 240, 400, 0, 0x0, 0 },
  109.   { BUTTON_CreateIndirect, "Start", ID_BUTTON_0, 70, 160, 100, 40, 0, 0x0, 0 },
  110.   { BUTTON_CreateIndirect, "Set1", ID_BUTTON_1, 70, 220, 100, 40, 0, 0x0, 0 },
  111.   { BUTTON_CreateIndirect, "Set2", ID_BUTTON_2, 70, 280, 100, 40, 0, 0x0, 0 },
  112.   { TEXT_CreateIndirect,   "xinye", ID_TEXT_1, 80, 60, 100, 40, 0, 0x0, 0 },
  113.         { TEXT_CreateIndirect,   "Hello STemWin", ID_TEXT_2, 80, 80, 100, 40, 0, 0x0, 0 },
  114.   // USER START (Optionally insert additional widgets)
  115.   // USER END
  116. };

  117. /*********************************************************************
  118. *
  119. *       Static code
  120. *
  121. **********************************************************************
  122. */

  123. // USER START (Optionally insert additional static code)
  124. void intToString(int num,char *buf)
  125. {
  126.         int temp;
  127.        
  128.         temp = num;
  129.         if(temp>=1000)
  130.                 temp%=1000;
  131.        
  132.         while(temp>0)
  133.         {
  134.                 *buf++=temp%10;
  135.                 temp/=10;
  136.         }
  137.        
  138. }
  139. // USER END

  140. /*********************************************************************
  141. *
  142. *       _cbDialog
  143. */
  144. static void _cbDialog(WM_MESSAGE * pMsg) {
  145.   WM_HWIN hItem;
  146.         //GUI_PID_STATE TouchState;
  147.         static int flag = 0;
  148.   int     NCode;
  149.   int     Id;
  150.         //char                 touchBuf[3];
  151.   // USER START (Optionally insert additional variables)
  152.   // USER END

  153.   switch (pMsg->MsgId) {
  154.         case WM_PAINT:
  155.                 if(!flag){
  156.                           hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_2);
  157.                                 TEXT_SetFont(hItem, &GUI_Font16_ASCII);
  158.                                 TEXT_SetText(hItem,"Hello World!");
  159.                 }
  160.                 break;
  161.   case WM_INIT_DIALOG:
  162.     //
  163.     // Initialization of 'Button'
  164.     //
  165.     hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_0);
  166.     BUTTON_SetFont(hItem, &GUI_Font16_ASCII);
  167.     //
  168.     // Initialization of 'Button'
  169.     //
  170.     hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_1);
  171.     BUTTON_SetFont(hItem, &GUI_Font16_ASCII);
  172.     //
  173.     // Initialization of 'Button'
  174.     //
  175.     hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_2);
  176.     BUTTON_SetFont(hItem, &GUI_Font16_ASCII);
  177.     // USER START (Optionally insert additional code for further widget initialization)
  178.                 hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_1);
  179.     TEXT_SetFont(hItem, &GUI_Font16_ASCII);
  180.     // USER END
  181.     break;
  182.     case WM_NOTIFY_PARENT:
  183.     Id    = WM_GetId(pMsg->hWinSrc);
  184.     NCode = pMsg->Data.v;
  185.     switch(Id) {
  186.     case ID_BUTTON_0: // Notifications sent by 'Button'
  187.       switch(NCode)
  188.                                 {
  189.                                 case WM_NOTIFICATION_CLICKED:
  190.                                         break;
  191.                                 case WM_NOTIFICATION_RELEASED:
  192.                                         break;
  193.                                 }
  194.                                 break;
  195.     case ID_BUTTON_1:
  196.       switch(NCode) {
  197.       case WM_NOTIFICATION_CLICKED:
  198.         break;
  199.       case WM_NOTIFICATION_RELEASED:
  200.                                 flag = !flag;
  201.                                 WM_InvalidateWindow(pMsg->hWin);
  202.                                 hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_2);
  203.                                 TEXT_SetFont(hItem, &GUI_Font16_ASCII);
  204.                                 TEXT_SetText(hItem,"Hello World!");
  205.         break;
  206.       }
  207.       break;
  208.     case ID_BUTTON_2:
  209.       switch(NCode) {
  210.       case WM_NOTIFICATION_CLICKED:
  211.         break;
  212.       case WM_NOTIFICATION_RELEASED:
  213.         break;
  214.       }
  215.       break;
  216.     }
  217.     break;
  218.         case WM_TOUCH:
  219.     break;
  220.                 //hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_1);
  221.                 //TEXT_SetFont(hItem, &GUI_Font16_ASCII);
  222.                 //GUI_TOUCH_GetState(&TouchState);
  223.                 //TEXT_SetText(hItem,"Hello World!");
  224.                 //GUI_intToString(TouchState.x,touchBuf);
  225.                 //TEXT_SetText(hItem,touchBuf);
  226.        
  227.                 //hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_2);
  228.                 //TEXT_SetFont(hItem, &GUI_Font16_ASCII);
  229.                 //GUI_intToString(TouchState.y,touchBuf);
  230.                 //TEXT_SetText(hItem,touchBuf);
  231.   // USER START (Optionally insert additional message handling)
  232.   // USER END
  233.   default:
  234.     WM_DefaultProc(pMsg);
  235.     break;
  236.   }
  237. }

  238. /*********************************************************************
  239. *
  240. *       Public code
  241. *
  242. **********************************************************************
  243. */
  244. /*********************************************************************
  245. *
  246. *       CreateWindow
  247. */
  248. WM_HWIN CreateWindow(void);
  249. WM_HWIN CreateWindow(void) {
  250.   WM_HWIN hWin;

  251.   hWin = GUI_CreateDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), _cbDialog, WM_HBKWIN, 0, 0);
  252.   return hWin;
  253. }

  254. // USER START (Optionally insert additional public code)
  255. // USER END

  256. /*************************** End of file ****************************/
复制代码

一周热门 更多>