在enWin(ucGui)中EDIT控件在数值模式(十进制/十六进制/二进制/浮点数)下编辑是,无法使用BackSpace键进行退格,主要涉及到的函数有:
EDIT_SetBinMode()
EDIT_SetDecMode()
EDIT_SetHexMode()
EDIT_SetFloatMode()
?
将Edit控件一旦使用此类的模式是将无法BackSpace键进行退格删除,解决办法如下,响应Edit控件的按键消息,当收到BackSpace键时强制将光标退到上一个字符,那么就使用到接口函数即:获取当前的字符光标位置和设置指定字符位置光标。
EDIT_GetCursorCharPos()
EDIT_SetCursorAtChar()
?
代码:
/*********************************************************************
* cbEdit 编辑控件回调
*/
static
void
cbEdit(WM_MESSAGE * pMsg) {
????switch (pMsg->MsgId) {
????case
WM_KEY:
????????switch (((WM_KEY_INFO *)(pMsg->Data.p))->Key){
????????case
GUI_KEY_ENTER:
????????????price = EDIT_GetFloatValue(widgetsItemBuf[0]);
????????????WM_SetFocus(widgetsItemBuf[1]);????
????????????return;
????????case
GUI_KEY_BACKSPACE:
????????????if(((WM_KEY_INFO *)(pMsg->Data.p))->PressedCnt == 0)
????????????EDIT_SetCursorAtChar(widgetsItemBuf[0],EDIT_GetCursorCharPos(widgetsItemBuf[0]) - 1);
????????????break;
????????}
????break;
????}
????EDIT_Callback(pMsg);
}
?
运行效果: