硬汉嵌入式论坛

 找回密码
 立即注册
查看: 3063|回复: 2
收起左侧

[μCGUI] 使用wm_setfocus函数聚焦在EDIT类型上导致按键失效

[复制链接]

29

主题

62

回帖

149

积分

初级会员

积分
149
发表于 2016-8-2 16:09:32 | 显示全部楼层 |阅读模式
static int Current_Button=0;
static const GUI_WIDGET_CREATE_INFO m_ChangeAdvancedInnerMenuPasswordDialogCreate[] = {
    { FRAMEWIN_CreateIndirect,  "高级内部菜单密码修改",           0,                       0,  0,  320,240,FRAMEWIN_CF_MOVEABLE,0},
    { TEXT_CreateIndirect,      "密码",              GUI_ID_TEXT0,            10, 10, 40, 20, 0,0},
    { EDIT_CreateIndirect,      "2324",               GUI_ID_EDIT0,            60, 10, 80,20, 0,0},
    { BUTTON_CreateIndirect,    "设置",              GUI_ID_BUTTON0,          260,140,40, 25, 0,0},
};
/*****************************************************************
**      FunctionName:void PaintDialog(WM_MESSAGE * pMsg)
**      Function: to initialize the Dialog items
**                                                      
**      call this function in _cbCallback --> WM_PAINT
*****************************************************************/
static void PaintDialog(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
*****************************************************************/
static void InitDialog(WM_MESSAGE * pMsg)
{
    WM_HWIN hWin = pMsg->hWin;
    FRAMEWIN_SetBarColor(hWin,1,GUI_BLACK);
       FRAMEWIN_SetClientColor(hWin,GUI_WHITE);
    FRAMEWIN_SetFont(hWin,&GUI_FontHZ_SimSun_14);   
    TEXT_SetFont(WM_GetDialogItem(hWin,GUI_ID_TEXT0),&GUI_FontHZ_SimSun_14);
    BUTTON_SetFont(WM_GetDialogItem(hWin,GUI_ID_BUTTON0),&GUI_FontHZ_SimSun_14);
    BUTTON_SetTextColor(WM_GetDialogItem(hWin,GUI_ID_BUTTON0),0,GUI_BLACK);
    BUTTON_SetBkColor(WM_GetDialogItem(hWin,GUI_ID_BUTTON0), 0, GUI_WHITE);
    EDIT_SetFont(WM_GetDialogItem(hWin,GUI_ID_EDIT0),&GUI_FontHZ_SimSun_14);
    EDIT_SetText(WM_GetDialogItem(hWin,GUI_ID_EDIT0),InnerMenuPassword);   
    Cd_Button_handle=WM_GetDialogItem(hWin,GUI_ID_EDIT0);
    EDIT_SetBkColor(Cd_Button_handle,1,GUI_BLACK);
    EDIT_SetTextColor(Cd_Button_handle,0,GUI_WHITE);
      Current_Button=0;
}
/*********************************************************************
*
*       Dialog callback routine
*/
static void m_ChangeAdvancedInnerMenuPasswordCallback(WM_MESSAGE * pMsg)
{
    int NCode, Id;
    char tt0[1]={0x7F};
    WM_HWIN hWin = pMsg->hWin;
    switch (pMsg->MsgId)
    {
        case WM_PAINT:
            PaintDialog(pMsg);
            break;
        case WM_INIT_DIALOG:
            InitDialog(pMsg);
            break;
        case WM_KEY:
            switch (((WM_KEY_INFO*)(pMsg->Data.p))->Key)
            {
                case GUI_KEY_ESCAPE:
                    //GUI_EndDialog(hWin, 1);
                    WIN_Exit(0);
                    break;
                case GUI_KEY_ENTER:
                    //GUI_EndDialog(hWin, 0);
                                switch(Current_Button){
                                    case 0:
                                                                               _MileageCalDialogCreate(resetChangeAdvancedInnerMenuPassword);
                                    break;
                                                                        case 1:
                                                                               // strcpy(InnerMenuPassword,callstr0);
                                                                                I2c_WriteEEPROM(ADDR_InnerMenuPassword,InnerMenuPassword,10);
                                                                                I2c_WriteEEPROM(ADDR_InnerMenuPasswordflag,tt0,1);
                                                                                WIN_Exit(0);
                                }
                                break;
        case GUI_KEY_UP:
                    switch(Current_Button){
                                    case 0:
                                                                                EDIT_SetBkColor(Cd_Button_handle,1,GUI_WHITE);
                                                                            EDIT_SetTextColor(Cd_Button_handle,0,GUI_BLACK);
                                        Cd_Button_handle=WM_GetDialogItem(hWin,GUI_ID_BUTTON0);
                                        BUTTON_SetBkColor(Cd_Button_handle, 0, GUI_BLACK);
                                        BUTTON_SetTextColor(Cd_Button_handle,0,GUI_WHITE);
                                        Current_Button=1;
                                    break;
                                                                        case 1:
                                                                                BUTTON_SetBkColor(Cd_Button_handle,0,GUI_WHITE);
                                        BUTTON_SetTextColor(Cd_Button_handle,0,GUI_BLACK);
                                        Cd_Button_handle=WM_GetDialogItem(hWin,GUI_ID_EDIT0);
                                        EDIT_SetBkColor(Cd_Button_handle, 1, GUI_BLACK);
                                        EDIT_SetTextColor(Cd_Button_handle,0,GUI_WHITE);
                                        Current_Button=0;
                                    break;                                                                        
                    }
                    break;
             case GUI_KEY_DOWN:
                    switch(Current_Button){
                                    case 0:
                                                                                EDIT_SetBkColor(Cd_Button_handle,1,GUI_WHITE);
                                        EDIT_SetTextColor(Cd_Button_handle,0,GUI_BLACK);
                                        Cd_Button_handle=WM_GetDialogItem(hWin,GUI_ID_BUTTON0);
                                        BUTTON_SetBkColor(Cd_Button_handle, 0, GUI_BLACK);
                                        BUTTON_SetTextColor(Cd_Button_handle,0,GUI_WHITE);
                                        Current_Button=1;
                                    break;   
                                                                        case 1:
                                                                                BUTTON_SetBkColor(Cd_Button_handle,0,GUI_WHITE);
                                        BUTTON_SetTextColor(Cd_Button_handle,0,GUI_BLACK);
                                        Cd_Button_handle=WM_GetDialogItem(hWin,GUI_ID_EDIT0);
                                        EDIT_SetBkColor(Cd_Button_handle, 1, GUI_BLACK);
                                        EDIT_SetTextColor(Cd_Button_handle,0,GUI_WHITE);
                                        Current_Button=0;
                                    break;   
                    }
                    break;   
                    break;        
            }
            break;
        case WM_NOTIFY_PARENT:
            Id = WM_GetId(pMsg->hWinSrc);
            NCode = pMsg->Data.v;        
            switch (Id)
            {
                case GUI_ID_OK:
                    if(NCode==WM_NOTIFICATION_RELEASED)
                        GUI_EndDialog(hWin, 0);
                    break;
                case GUI_ID_CANCEL:
                    if(NCode==WM_NOTIFICATION_RELEASED)
                        GUI_EndDialog(hWin, 0);
                    break;

            }
            break;
        default:
            WM_DefaultProc(pMsg);
    }
}

/*******************************************************************************
* Function Name :_SysSetCommCreate
* Description   :可返回的列表窗口建立
* Input         :void * p
* Output        :void
* Other         :
* Date          :2016/03/06
*******************************************************************************/
static void _ChangeAdvancedInnerMenuPasswordCreate(void *p)
{
    MENU_INFO_ITEM *pMenu = (MENU_INFO_ITEM *)p;

    //新建窗口
    m_ChangeAdvancedInnerMenuPassword.hFrame = GUI_CreateDialogBox(m_ChangeAdvancedInnerMenuPasswordDialogCreate,
                                            GUI_COUNTOF(m_ChangeAdvancedInnerMenuPasswordDialogCreate),
                                            m_ChangeAdvancedInnerMenuPasswordCallback, WM_HBKWIN, 0, 0);
       //WM_SetFocus(WM_GetDialogItem(m_ChangeAdvancedInnerMenuPassword.hFrame,GUI_ID_EDIT0));
    WM_SetFocus(WM_GetDialogItem(m_ChangeAdvancedInnerMenuPassword.hFrame,GUI_ID_BUTTON0));
}

使用WM_SetFocus(WM_GetDialogItem(m_ChangeAdvancedInnerMenuPassword.hFrame,GUI_ID_EDIT0));将焦点初始化到EDIT0上,进入界面后,各个按键都不能用,但把焦点放在BUTTON0上,进入界面后就会在BUTTON0上出现虚线框,使界面不美观,请教下,这个问题怎么来解决呢
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107627
QQ
发表于 2016-8-3 11:57:11 | 显示全部楼层
设置button禁止聚焦,调用这个函数,
或者设置聚焦虚线的颜色

BUTTON_SetFocusColor() Sets the focus color of the BUTTON widget.
BUTTON_SetFocussable() Sets the ability to receive the input focus.
回复

使用道具 举报

29

主题

62

回帖

149

积分

初级会员

积分
149
 楼主| 发表于 2016-8-3 15:06:50 | 显示全部楼层

回 eric2013 的帖子

eric2013:设置button禁止聚焦,调用这个函数,
或者设置聚焦虚线的颜色

BUTTON_SetFocusColor() Sets the focus color of the BUTTON widget.
BUTTON_SetFocussable() Sets the ability to receive the input focus. (2016-08-03 11:57) 
您好。按照你说的,我这两种方法都用了,可是还是一直有虚线框。。。。。
BUTTON_SetFocusColor(WM_GetDialogItem(m_ChangeAdvancedInnerMenuPassword.hFrame,GUI_ID_BUTTON0),GUI_WHITE);
    WM_SetFocus(WM_GetDialogItem(m_ChangeAdvancedInnerMenuPassword.hFrame,GUI_ID_BUTTON0));
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-6-8 11:51 , Processed in 0.150127 second(s), 26 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表