分享

UCGUI触摸软键盘实现方法探讨

 guitarhua 2012-09-22

UCGUI触摸软键盘实现方法探讨  

2012-05-11 22:06:06|  分类: 默认分类 |  标签: |字号 订阅

做个软键盘用作数字输入,用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

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多