做个软键盘用作数字输入,用dialog做的。只要在需要键盘的地方用创建dialog函数创建就可以
GUI_CreateDialogBox(_aDialogCreate_kb, GUI_COUNTOF(_aDialogCreate_kb), &_cbCallback_kb, 0, 0, 0); 函数中使用的BVtxt和BVtxt_temp,还有格式检查函数NumCheck自己定义吧。 水平有限,做的比较粗糙,将就着用吧,有时间在自习修改。 /********************************************************************* * * Dialog resource keyboard * * This table conatins the info required to create the dialog. * It has been created by ucGUIbuilder. */ static const GUI_WIDGET_CREATE_INFO _aDialogCreate_kb[] = { { FRAMEWIN_CreateIndirect, "设置", 0, 0, 0, 240,320,0,0}, { BUTTON_CreateIndirect, "0", GUI_ID_BUTTON0, 96, 240,40, 40, 0,0}, { BUTTON_CreateIndirect, "1", GUI_ID_BUTTON1, 32, 102,40, 40, 0,0}, { BUTTON_CreateIndirect, "2", GUI_ID_BUTTON2, 96, 102,40, 40, 0,0}, { BUTTON_CreateIndirect, "3", GUI_ID_BUTTON3, 157,102,40, 40, 0,0}, { BUTTON_CreateIndirect, "4", GUI_ID_BUTTON4, 32, 148,40, 40, 0,0}, { BUTTON_CreateIndirect, "5", GUI_ID_BUTTON5, 96, 148,40, 40, 0,0}, { BUTTON_CreateIndirect, "6", GUI_ID_BUTTON6, 157,148,40, 40, 0,0}, { BUTTON_CreateIndirect, "7", GUI_ID_BUTTON7, 32, 194,40, 40, 0,0}, { BUTTON_CreateIndirect, "8", GUI_ID_BUTTON8, 96, 194,40, 40, 0,0}, { BUTTON_CreateIndirect, "9", GUI_ID_BUTTON9, 157,194,40, 40, 0,0}, { BUTTON_CreateIndirect, "确定", GUI_ID_OK, 32, 240,40, 40, 0,0}, { BUTTON_CreateIndirect, "取消", GUI_ID_CANCEL, 157,240,40, 40, 0,0}, { EDIT_CreateIndirect, NULL, GUI_ID_EDIT0, 17, 31, 193,32, 0,0}, { BUTTON_CreateIndirect, "'", GUI_ID_BUTTON10, 96, 70, 40, 26, 0,0}, { BUTTON_CreateIndirect, "删除", GUI_ID_BUTTON11, 157,71, 40, 25, 0,0} }; /***************************************************************** ** FunctionName:void PaintDialog(WM_MESSAGE * pMsg) ** Function: to initialize the Dialog items ** ** call this function in _cbCallback --> WM_PAINT *****************************************************************/ void PaintDialog_kb(WM_MESSAGE * pMsg) { WM_HWIN hWin = pMsg->hWin; } /***************************************************************** ** FunctionName:void InitDialog(WM_MESSAGE * pMsg) ** Function: to initialize the Dialog items ** ** call this function in _cbCallback --> WM_INIT_DIALOG *****************************************************************/ void InitDialog_kb(WM_MESSAGE * pMsg) { WM_HWIN hWin = pMsg->hWin; // //FRAMWIN // FRAMEWIN_SetTitleHeight(hWin,16); FRAMEWIN_SetFont(hWin,&GUI_FontHZ16); // //GUI_ID_BUTTON0 // BUTTON_SetFont(WM_GetDialogItem(hWin,GUI_ID_BUTTON0),&GUI_Font24B_ASCII); // //GUI_ID_BUTTON1 // BUTTON_SetFont(WM_GetDialogItem(hWin,GUI_ID_BUTTON1),&GUI_Font24B_ASCII); // //GUI_ID_BUTTON2 // BUTTON_SetFont(WM_GetDialogItem(hWin,GUI_ID_BUTTON2),&GUI_Font24B_ASCII); // //GUI_ID_BUTTON3 // BUTTON_SetFont(WM_GetDialogItem(hWin,GUI_ID_BUTTON3),&GUI_Font24B_ASCII); // //GUI_ID_BUTTON4 // BUTTON_SetFont(WM_GetDialogItem(hWin,GUI_ID_BUTTON4),&GUI_Font24B_ASCII); // //GUI_ID_BUTTON5 // BUTTON_SetFont(WM_GetDialogItem(hWin,GUI_ID_BUTTON5),&GUI_Font24B_ASCII); // //GUI_ID_BUTTON6 // BUTTON_SetFont(WM_GetDialogItem(hWin,GUI_ID_BUTTON6),&GUI_Font24B_ASCII); // //GUI_ID_BUTTON7 // BUTTON_SetFont(WM_GetDialogItem(hWin,GUI_ID_BUTTON7),&GUI_Font24B_ASCII); // //GUI_ID_BUTTON8 // BUTTON_SetFont(WM_GetDialogItem(hWin,GUI_ID_BUTTON8),&GUI_Font24B_ASCII); // //GUI_ID_BUTTON9 // BUTTON_SetFont(WM_GetDialogItem(hWin,GUI_ID_BUTTON9),&GUI_Font24B_ASCII); // //GUI_ID_EDIT0 // EDIT_SetFont(WM_GetDialogItem(hWin,GUI_ID_EDIT0),&GUI_Font24_ASCII); // EDIT_SetValue(WM_GetDialogItem(hWin,GUI_ID_EDIT0),0); EDIT_SetMaxLen(WM_GetDialogItem(hWin,GUI_ID_EDIT0),9); // EDIT_SetDecMode(WM_GetDialogItem(hWin,GUI_ID_EDIT0),0,0,999.9999,4,0); // //GUI_ID_BUTTON12 // BUTTON_SetFont(WM_GetDialogItem(hWin,GUI_ID_BUTTON10),&GUI_Font24B_ASCII); } /********************************************************************* * * Dialog callback routine */ static void _cbCallback_kb(WM_MESSAGE * pMsg) { int NCode, Id; WM_HWIN hWin = pMsg->hWin; switch (pMsg->MsgId) { case WM_PAINT: PaintDialog_kb(pMsg); break; case WM_INIT_DIALOG: InitDialog_kb(pMsg); break; case WM_KEY: switch (((WM_KEY_INFO*)(pMsg->Data.p))->Key) { case GUI_KEY_ESCAPE: GUI_EndDialog(hWin, 1); break; case GUI_KEY_ENTER: GUI_EndDialog(hWin, 0); break; } break; case WM_NOTIFY_PARENT: Id = WM_GetId(pMsg->hWinSrc); NCode = pMsg->Data.v; switch(NCode) { case WM_NOTIFICATION_RELEASED: switch (Id) { case GUI_ID_OK: EDIT_AddKey(WM_GetDialogItem(hWin,GUI_ID_EDIT0),'\0'); EDIT_GetText(WM_GetDialogItem(hWin,GUI_ID_EDIT0),BVtxt_temp,9); if(NumCheck(BVtxt_temp,NumStyle_Flag)) { strcpy(BVtxt,BVtxt_temp); GUI_EndDialog(hWin, 0); break ; } GUI_MessageBox("Press Right Number","Warning!!",0); break; case GUI_ID_CANCEL: GUI_EndDialog(hWin, 0); break; case GUI_ID_BUTTON0: EDIT_AddKey(WM_GetDialogItem(hWin,GUI_ID_EDIT0),'0'); break; case GUI_ID_BUTTON1: EDIT_AddKey(WM_GetDialogItem(hWin,GUI_ID_EDIT0),'1'); break; case GUI_ID_BUTTON2: EDIT_AddKey(WM_GetDialogItem(hWin,GUI_ID_EDIT0),'2'); break; case GUI_ID_BUTTON3: EDIT_AddKey(WM_GetDialogItem(hWin,GUI_ID_EDIT0),'3'); break; case GUI_ID_BUTTON4: EDIT_AddKey(WM_GetDialogItem(hWin,GUI_ID_EDIT0),'4'); break; case GUI_ID_BUTTON5: EDIT_AddKey(WM_GetDialogItem(hWin,GUI_ID_EDIT0),'5'); break; case GUI_ID_BUTTON6: EDIT_AddKey(WM_GetDialogItem(hWin,GUI_ID_EDIT0),'6'); break; case GUI_ID_BUTTON7: EDIT_AddKey(WM_GetDialogItem(hWin,GUI_ID_EDIT0),'7'); break; case GUI_ID_BUTTON8: EDIT_AddKey(WM_GetDialogItem(hWin,GUI_ID_EDIT0),'8'); break; case GUI_ID_BUTTON9: EDIT_AddKey(WM_GetDialogItem(hWin,GUI_ID_EDIT0),'9'); break; case GUI_ID_BUTTON10: EDIT_AddKey(WM_GetDialogItem(hWin,GUI_ID_EDIT0),'.'); break; case GUI_ID_BUTTON11: EDIT_SetText(WM_GetDialogItem(hWin,GUI_ID_EDIT0),NULL);//清空输入框,挨个删除用下面两行 // WM_SetFocus(WM_GetDialogItem(hWin,GUI_ID_EDIT0)); // GUI_SendKeyMsg(GUI_KEY_BACKSPACE,1); break; } break; } break; default: WM_DefaultProc(pMsg); } } //键盘对话框创建 //GUI_CreateDialogBox(_aDialogCreate_kb, GUI_COUNTOF(_aDialogCreate_kb), &_cbCallback_kb, 0, 0, 0); /**********************************************************************/ //end of keyboard dialog |
|