硬汉嵌入式论坛

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

[emWin] 如何改变按钮文字颜色

[复制链接]

8

主题

11

回帖

35

积分

新手上路

积分
35
发表于 2019-5-28 15:24:51 | 显示全部楼层 |阅读模式
本帖最后由 雅虎9527 于 2019-5-28 15:24 编辑

不知道为什么没法添加图片
大家好,主界面上放了3个按钮,使用的物理按键。光标现在可以在3个按钮键循环移动。现在遇到的问题是:
1、进入主界面后,必须得按一下 “下键”,光标才会在 “测量界面” 这个按钮上,显示出来。我想实现,进入主界面后光标直接就定位在 “测量界面”,请问这个该如何实现?
2、光标在三个按钮上移动时,当光标移动到某一个按钮上时,该按钮上的文字颜色就变为红色,光标移开后,按钮上的文字颜色又恢复成白色,请问这个又该如何实现呢?

下面是我主界面的回调函数
static void _cbMainView(WM_MESSAGE* pMsg)
{
        char buf[60];
        WM_HWIN hText;
        WM_HWIN hWin = pMsg->hWin;
        switch (pMsg->MsgId)
        {
                case WM_CREATE:
                WM_SetFocus(hWin);//设置聚焦
                _CreateButton(hWin, "测量界面", GUI_ID_BUTTON0, (FRAME_WIDTH >> 1) - 60,  25, 120, 40, 0);
                _CreateButton(hWin, "历史查询", GUI_ID_BUTTON1, (FRAME_WIDTH >> 1) - 60,  90, 120, 40, 0);
                _CreateButton(hWin, "设置界面", GUI_ID_BUTTON2, (FRAME_WIDTH >> 1) - 60, 155, 120, 40, 0);        
                break;
               
                case WM_KEY:
                switch (((WM_KEY_INFO*)(pMsg->Data.p))->Key)
                {
                        case GUI_KEY_BACKTAB:
                        WM_SetFocusOnPrevChild(hWin);
                        break;

                        case GUI_KEY_TAB:
                        WM_SetFocusOnNextChild(hWin);
                        break;
                }
                break;
                case WM_PAINT://窗口变为无效并应重绘时,发送到窗口
                _PaintFrame();//重绘背景
                break;
                case WM_NOTIFY_PARENT://告知父窗口,其子窗口中发生了某些改变
                if (pMsg->Data.v == WM_NOTIFICATION_RELEASED)
                {
                        int Id = WM_GetId(pMsg->hWinSrc);//获取控件ID
                        switch (Id)
                        {
                                case GUI_ID_BUTTON0:
                                _DeleteFrame();
                                _CreateFrame(&_cbMeasureView);
                                break;
                                
                                case GUI_ID_BUTTON1:
                                _DeleteFrame();//删除当前窗口
                                _CreateFrame(&_cbRecordView);
                                break;
                                
                                case GUI_ID_BUTTON2:
                                _DeleteFrame();//删除当前窗口
                                _CreateFrame(&_cbSetView);

                                break;
                                
                                default:break;
                        }   
                }
                break;
                case WM_TIMER:        //定时器消息               
                break;
                default:WM_DefaultProc(pMsg);break;
        }
}



回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115778
QQ
发表于 2019-5-28 17:42:11 | 显示全部楼层
1、可以直接WM_SetFocus到你要聚焦的按钮上。
2、你可以在按钮的自定义回调的聚焦消息里面设置下,也可以自己管理移动位置记录,移动到那个按钮了,手动设置下字体颜色。
回复

使用道具 举报

8

主题

11

回帖

35

积分

新手上路

积分
35
 楼主| 发表于 2019-5-29 09:40:47 | 显示全部楼层
eric2013 发表于 2019-5-28 17:42
1、可以直接WM_SetFocus到你要聚焦的按钮上。
2、你可以在按钮的自定义回调的聚焦消息里面设置下,也可以 ...

额,谢谢了,我试试。目前是在创建按钮时,用的换肤的方式,按钮聚焦时,背景底色就变为绿色,虽然字体颜色没法改。我再试研究一下你说的方法。
BUTTON_GetSkinFlexProps(&BUTTON_Props, BUTTON_SKINFLEX_PI_ENABLED);/* 获取按钮启动状态的皮肤 */       
        BUTTON_Props.aColorFrame[0] = GUI_GREEN;
        BUTTON_Props.aColorFrame[1] = GUI_GREEN;
        BUTTON_Props.aColorFrame[2] = GUI_GREEN;
        BUTTON_Props.aColorLower[0] = GUI_GREEN;
        BUTTON_Props.aColorLower[1] = GUI_GREEN;
        BUTTON_Props.aColorUpper[0] = GUI_GREEN;
        BUTTON_Props.aColorUpper[1] = GUI_GREEN;
        BUTTON_SetSkinFlexProps(&BUTTON_Props, BUTTON_SKINFLEX_PI_FOCUSSED);/* 设置聚焦状态的皮肤色 */
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-18 05:47 , Processed in 0.482504 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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