|
各位朋友好,我在使用ucgui做触摸屏和对话框按钮的时候遇到点问题向大家请教一下啊
我把触摸屏的底层驱动的四个函数编写好了,并且在一个任务中调用 GUI_TOUCH_Exec();函数,并且把触摸屏消息封装成了MOUSE消息,如下:
GUI_HID_STATE TsState; GUI_PID_STATE *ptr; INT32U Tpressed ; for(;;) { GUI_TOUCH_Exec(); Tpressed=GUI_TOUCH_GetState(&TsState); if ( Tpressed!=0) { Uart_Printf(s8); Uart_Printf ("\n %d,%d",TsState.x,TsState.y); ptr->x=TsState.x+30; ptr->y=TsState.y+10; ptr->Pressed= Tpressed; OSTimeDly(5);
}
然后在创建对话框的时候创建了一个按钮
创建按钮代码如下:BUTTON_CreateIndirect, "OK", GUI_ID_OK, 100, 5, 60, 20 },
并且设置了回调函数如下:
void _cbCallback(WM_MESSAGE * pMsg) {
int NCode, Id;
WM_HWIN hListBox1;
WM_HWIN hWin = pMsg->hWin; //目标窗体句柄 Uart_Printf ("\n The frame callback is opreting"); switch (pMsg->MsgId) { case WM_INIT_DIALOG: //初始化对话框资源 hListBox1 = WM_GetDialogItem(hWin, GUI_ID_LISTBOX0); //得到列表框句柄 LISTBOX_SetText(hListBox1, _apListBox); break; case WM_KEY:
switch (((WM_KEY_INFO*)(pMsg->Data.p))->Key) {
case GUI_KEY_ESCAPE:
GUI_EndDialog(hWin, 1); Uart_Printf ("\n The Diolog is del"); break;
case GUI_KEY_ENTER:
GUI_EndDialog(hWin, 0); Uart_Printf ("\n The Diolog is delete"); break; } break; case WM_NOTIFY_PARENT: //此消息将子窗体的外设输入的消息传递到它的父窗体 //因为消息一般统一在父窗体统一处理
Id = WM_GetId(pMsg->hWinSrc); /* Id of widget */
NCode = pMsg->Data.v; /* Notification code */
switch (NCode) {
case WM_NOTIFICATION_RELEASED: /*React only if released */
if (Id == GUI_ID_OK) { /* OK Button*/
GUI_EndDialog(hWin, 0); Uart_Printf ("\nthe butoon and diolog is opration!"); }
if (Id == GUI_ID_CANCEL) { /* Cancel Button*/
GUI_EndDialog(hWin, 1);
}
break;
} break;
default:
WM_DefaultProc(pMsg);
}
void Create_Dialog (void) { GUI_CreateDialogBox( _aDialogCreate, GUI_COUNTOF(_aDialogCreate), &_cbCallback, 0, 0, 0); }
现在的问题是只有我用触摸笔点击按钮的左上角时回调函数的判断按钮部分才起作用,
我怎样改才可以实现点击按钮的空间的任何部分都是起作用的啊?
我看把触摸屏消息封装成MOUSE消息时是需要提供 触摸的X,Y,和PRESSED ,那么只是一点的坐标啊,要怎样修改呢?谢谢 |
阿莫论坛20周年了!感谢大家的支持与爱护!!
如果天空是黑暗的,那就摸黑生存;
如果发出声音是危险的,那就保持沉默;
如果自觉无力发光,那就蜷伏于牆角。
但是,不要习惯了黑暗就为黑暗辩护;
也不要为自己的苟且而得意;
不要嘲讽那些比自己更勇敢的人。
我们可以卑微如尘土,但不可扭曲如蛆虫。
|