硬汉嵌入式论坛

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

[emWin] button的自定义回调函数中,无法更改其他控件的属性

[复制链接]

7

主题

10

回帖

31

积分

新手上路

积分
31
发表于 2017-8-16 13:34:08 | 显示全部楼层 |阅读模式
QQ截图20170816132239.png

例如 按下button1,在button1的自定义回调函数中更改text的内容,同时将button2,和button3的位图进行切换
但是无法实现,代码如下:

static void _cbButton_Setting(WM_MESSAGE * pMsg)
{
    WM_HWIN  hWin;

    hWin = pMsg->hWin;
    switch (pMsg->MsgId)
    {
    case WM_PAINT:
        if (BUTTON_IsPressed(hWin))
        {

            TEXT_SetText(hItem_Text, "Setting");
            TEXT_SetFont(hItem_Text, GUI_FONT_32B_ASCII);
            TEXT_SetTextAlign(hItem_Text, GUI_TA_HCENTER | GUI_TA_VCENTER);
            GUI_DrawBitmap(&Bitmap[3], 0, 0);
            BUTTON_SetBitmapEx(hItem_Button_Start, BUTTON_CI_UNPRESSED, &Bitmap[3], 1, 1);
        }
        else
        {
            GUI_DrawBitmap(&Bitmap[1], 0, 0);
        }
        break;

    default:
        BUTTON_Callback(pMsg);
    }
}
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117635
QQ
发表于 2017-8-16 13:44:02 | 显示全部楼层
button的自定义回调函数不是用来处理消息的。一般仅用来设置皮肤显示效果。

button操作text控件,要在你对话框的回调函数里面处理。
回复

使用道具 举报

7

主题

10

回帖

31

积分

新手上路

积分
31
 楼主| 发表于 2017-8-16 14:05:50 | 显示全部楼层

回 eric2013 的帖子

eric2013:button的自定义回调函数不是用来处理消息的。一般仅用来设置皮肤显示效果。

button操作text控件,要在你对话框的回调函数里面处理。 (2017-08-16 13:44) 
如果需要更改其他button的显示效果,比如更改button位图,也是在对话框的回调函数里修改button位图吗? 我在对话框的回调函数里修改其他button的位图,没有成功
case WM_NOTIFICATION_CLICKED:
BUTTON_SetBitmapEx(hItem_Button_Start, BUTTON_CI_UNPRESSED, &Bitmap[3], 1, 1);
  break;
case WM_NOTIFICATION_RELEASED:
BUTTON_SetBitmapEx(hItem_Button_Start, BUTTON_CI_UNPRESSED, &Bitmap[3], 1, 1);
  break;
在以上两个地方修改都没有成功
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117635
QQ
发表于 2017-8-16 14:14:06 | 显示全部楼层

回 打翻的酱油瓶 的帖子

打翻的酱油瓶:如果需要更改其他button的显示效果,比如更改button位图,也是在对话框的回调函数里修改button位图吗? 我在对话框的回调函数里修改其他button的位图,没有成功
case WM_NOTIFICATION_CLICKED:
BUTTON_SetBitmapEx(hItem_Button_Start, BUTTON_CI_UNPRESSED, &Bitmap[3], 1 .. (2017-08-16 14:05) 
要放在对话框的初始化消息WM_INIT_DIALOG里面。
回复

使用道具 举报

7

主题

10

回帖

31

积分

新手上路

积分
31
 楼主| 发表于 2017-8-16 14:50:40 | 显示全部楼层

回 eric2013 的帖子

eric2013:要放在对话框的初始化消息WM_INIT_DIALOG里面。 (2017-08-16 14:14) 
对话框的初始化消息WM_INIT_DIALOG里面的绘图函数只是初次创建控件的绘图函数。
这里当前的操作是按下button1以后,更改button2和button3的显示位图,如果将更改button2和button3位图函数放在WM_INIT_DIALOG里 需要怎么触发,无效化整个窗口吗? WM_InvalidateWindow()这个函数吗?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117635
QQ
发表于 2017-8-16 14:54:52 | 显示全部楼层

回 打翻的酱油瓶 的帖子

打翻的酱油瓶:对话框的初始化消息WM_INIT_DIALOG里面的绘图函数只是初次创建控件的绘图函数。
这里当前的操作是按下button1以后,更改button2和button3的显示位图,如果将更改button2和button3位图函数放在WM_INIT_DIALOG里 需要怎么触发,无效化整个窗口吗? WM_InvalidateWindow()这个函数 .. (2017-08-16 14:50) 
那没问题的,发完整的测试测试代码,最好可以直接在模拟器上面跑,我测试下。
回复

使用道具 举报

7

主题

10

回帖

31

积分

新手上路

积分
31
 楼主| 发表于 2017-8-16 15:27:43 | 显示全部楼层

回 eric2013 的帖子

[/quote][quote]当前想要完成的操作是按下button1切换为选中状态位图,text显示START,并将button2和button3的位图切换为未选中状态位图。按下任意button,将当前按下的button的位图显示为选中状态,没按下的button显示为未选中状态。
其实是为了实现Radio控件单选的效果。
[/quote][quote]
那没问题的,发完整的测试测试代码,最好可以直接在模拟器上面跑,我测试下。


当前想要完成的操作是按下button1切换为选中状态位图,text显示START,并将button2和button3的位图切换为未选中状态位图。

MainFram.rar

128 KB, 下载次数: 76

模拟器

回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117635
QQ
发表于 2017-8-16 16:23:16 | 显示全部楼层
三个按钮都存在这种情况。把三个按钮的函数WM_SetCallback都注释掉就可以用了。估计这个不是你想要的,得想法更新按钮自定义回调函数了,可以设置按钮无效化,在按钮自定义回调消息的WM_PAINT里面更换。

QQ截图20170816161943.png
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-8-19 19:26 , Processed in 0.044216 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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