硬汉嵌入式论坛

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

[emWin] 按钮回调函数如何优化?

[复制链接]

100

主题

94

回帖

394

积分

高级会员

积分
394
发表于 2020-2-18 15:17:06 | 显示全部楼层 |阅读模式
static void _cbPreButtonABTN(WM_MESSAGE * pMsg)
{
WM_HWIN hWin;
hWin = pMsg->hWin;
switch (pMsg->MsgId)
{
  case WM_PAINT:
  {
   if(BUTTON_IsPressed(hWin))
   {
    GUI_DrawBitmap(&(g_BmpRes.hSamplePrePressed), 0, 0);
   }
   else
   {
    GUI_DrawBitmap(&(g_BmpRes.hSamplePreUnPressed), 0, 0);
   }
   
   break;
  }
  default:
   BUTTON_Callback(pMsg);
}
}
static void _cblevel2(WM_MESSAGE * pMsg)
{
.....
     case WM_INIT_DIALOG:

       WM_SetCallback(hItem, _cbPreButtonABTN);      
      break;

.......
}


由于有很对Button,而且他们可能分布在不同的页面,代码里会产生很多类似“
cbPreButtonABTN
”这种接口 ,代码显得很冗余,有没有好的方法优化一下哈,谢谢
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115787
QQ
发表于 2020-2-18 17:51:22 | 显示全部楼层
可以多个按钮使用共同的回调。

回调做个简单处理即可。
回复

使用道具 举报

100

主题

94

回帖

394

积分

高级会员

积分
394
 楼主| 发表于 2020-2-18 19:32:38 | 显示全部楼层
eric2013 发表于 2020-2-18 17:51
可以多个按钮使用共同的回调。

回调做个简单处理即可。

如何在回调函数里区别,到底是哪个按钮呢?我的第一想法是根据按钮id,比如ID_BUTTON_0,但是ID_BUTTON_0 存在被重复使用的可能性。怎么解决这种问题呢?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115787
QQ
发表于 2020-2-19 00:08:24 | 显示全部楼层
wen 发表于 2020-2-18 19:32
如何在回调函数里区别,到底是哪个按钮呢?我的第一想法是根据按钮id,比如ID_BUTTON_0,但是ID_BUTTON_0  ...

不需要区分,在回调函数里面直接操作hWin = pMsg->hWin即可。

你要做只是用按钮api设置好相应的效果,然后在按钮回调里面使用句柄hWin = pMsg->hWin获取,然在根据需要做成自己想要的效果。
回复

使用道具 举报

100

主题

94

回帖

394

积分

高级会员

积分
394
 楼主| 发表于 2020-2-19 08:23:03 | 显示全部楼层
eric2013 发表于 2020-2-19 00:08
不需要区分,在回调函数里面直接操作hWin = pMsg->hWin即可。

你要做只是用按钮api设置好相应的效果, ...

static void _cbComm(WM_MESSAGE * pMsg)
{
        WM_HWIN hWin;
        hWin = pMsg->hWin;
        switch (pMsg->MsgId)
        {
                case WM_PAINT:
                {
                        if(BUTTON_IsPressed(hWin))
                        {
                                GUI_DrawBitmap(&(g_BmpRes.hDataNextPagePressed), 0, 0);
                        }
                        else
                        {
                                GUI_DrawBitmap(&(g_BmpRes.hDataNextPageUnpressed), 0, 0);
                        }

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

可能我的问题没描述清楚,我重新阐述一下

每个按钮的图片不一样;这些按钮有几个是在一个页面上,有几个是在另一个页面上;两页面之间的切换用的接口是WM_DeleteWindow;我就想用_cbComm 这一个回调管理所有按钮的图片更新情况,请问我该如何根据hWin来判断我到底要更新哪张图呢?谢谢
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115787
QQ
发表于 2020-2-19 08:55:40 | 显示全部楼层
wen 发表于 2020-2-19 08:23
static void _cbComm(WM_MESSAGE * pMsg)
{
        WM_HWIN hWin;

这样的话,需要你整个按钮数组,记录所有句柄,图片也全部做成数组列表。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-18 17:14 , Processed in 0.307581 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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