硬汉嵌入式论坛

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

[emWin] 同时存在的两个窗口调用同一回调函数,能否传递参数?

[复制链接]

14

主题

35

回帖

14

积分

初级会员

积分
14
发表于 2017-7-25 22:14:36 | 显示全部楼层 |阅读模式
自定义了Button控件,其回调函数为 _cbButton,以下代码进行调用

hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_0);
WM_SetCallback(hItem, _cbButton);

在 _cbButton中需要显示字符串数组,而不同的窗口调用 _cbButton时里面显示的字符串数组又不一样
比如窗口1里面要显示char *_aText[] = {" A", "B", "C"};
窗口2里面需要显示char *_aText[] = {" D", "E", "F"};


这里试过的方法如下:
1、定义char *_aText[]为全局变量,在窗口1的回调函数中赋值{" A", "B", "C"},再调用WM_SetCallback(hItem, _cbButton);
之后在窗口2的回调函数中赋值{" D", "E", "F"},再调用WM_SetCallback(hItem, _cbButton);
其结果是,窗口1窗口2显示的都是{" D", "E", "F"},达不到预期


2、查询WM_CALLBACK,知道typedef void WM_CALLBACK( WM_MESSAGE * pMsg);
因此想在pMsg里进行传参,但是 const void * p;指针只针对void,不能传char *类型的指针,编译错误。

struct WM_MESSAGE {
  int MsgId;            /* type of message */
  WM_HWIN hWin;         /* Destination window */
  WM_HWIN hWinSrc;      /* Source window  */
  union {
    const void * p;            /* Some messages need more info ... Pointer is declared "const" because some systems (M16C) have 4 byte const, byte 2 byte default ptrs */
    int v;
    GUI_COLOR Color;
  } Data;
};


请问各位大神,有木有办法可以在使用WM_SetCallback的时候能够往里面传参数呢?谢谢~[s:126]
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115747
QQ
发表于 2017-7-26 10:42:59 | 显示全部楼层
不用这么麻烦,调用函数hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_0);后,调用BUTTON的文本设置函数,设置好。

在按钮的自定义回调函数中用BUTTON的获取字符函数获取即可。
回复

使用道具 举报

14

主题

35

回帖

14

积分

初级会员

积分
14
 楼主| 发表于 2017-7-26 10:59:44 | 显示全部楼层

回 eric2013 的帖子

eric2013:
不用这么麻烦,调用函数hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_0);后,调用BUTTON的文本设置函数,设置好。

在按钮的自定义回调函数中用BUTTON的获取字符函数获取即可。

主要是BUTTON_SetText()设置不了文本,因为我是按照硬汉哥之前推荐的做法,用一个按钮实现了3个按钮之间的相互相应,可见贴子:http://www.armbbs.cn/forum.php?mod=viewthread&tid=31458
072612.jpg

0726.jpg

之前不同窗口分开调用button的回调函数是可以的,但是多个窗口使用相同的代码(除了字符显示不一样)显得有些冗余,所以想请教下能不能往回调函数里面传参呢?
回复

使用道具 举报

14

主题

35

回帖

14

积分

初级会员

积分
14
 楼主| 发表于 2017-7-26 11:03:57 | 显示全部楼层

回 eric2013 的帖子

游客,如果您要查看本帖隐藏内容请回复
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115747
QQ
发表于 2017-7-26 11:25:15 | 显示全部楼层
原来如此。

直接用个全局变量设置参数就行。
回复

使用道具 举报

14

主题

35

回帖

14

积分

初级会员

积分
14
 楼主| 发表于 2017-7-26 11:38:03 | 显示全部楼层

回 eric2013 的帖子

eric2013:
原来如此。

直接用个全局变量设置参数就行。
eric2013:
不用这么麻烦,调用函数hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_0);后,调用BUTTON的文本设置函数,设置好。

在按钮的自定义回调函数中用BUTTON的获取字符函数获取即可。
eric2013:
不用这么麻烦,调用函数hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_0);后,调用BUTTON的文本设置函数,设置好。

在按钮的自定义回调函数中用BUTTON的获取字符函数获取即可。

我用了全局变量,但是我的2个window是同时存在的,这回导致建立了窗口1后再建立窗口2,窗口1的字符也变成了窗口2的字符。
而且代码里面按键响应都对该button回调函数做了无效化,也使得2个窗口显示的字符一样了。。
貌似没有办法可以对button回调函数进行传参?~
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115747
QQ
发表于 2017-7-26 11:42:51 | 显示全部楼层

回 mumuha 的帖子

mumuha:我用了全局变量,但是我的2个window是同时存在的,这回导致建立了窗口1后再建立窗口2,窗口1的字符也变成了窗口2的字符。
而且代码里面按键响应都对该button回调函数做了无效化,也使得2个窗口显示的字符一样了。。
貌似没有办法可以对button回调函数进行传参?~ (2017-07-26 11:38) 
http://www.armbbs.cn/forum.php?mod=viewthread&tid=30670
回复

使用道具 举报

14

主题

35

回帖

14

积分

初级会员

积分
14
 楼主| 发表于 2017-7-26 15:29:37 | 显示全部楼层

回 eric2013 的帖子

eric2013:http://www.armbbs.cn/forum.php?mod=viewthread&tid=30670 (2017-07-26 11:42) 
硬汉哥完美地解决了我的问题,非常之感谢![s:151]
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115747
QQ
发表于 2017-7-27 01:33:58 | 显示全部楼层

回 mumuha 的帖子

mumuha:硬汉哥完美地解决了我的问题,非常之感谢![s:151] (2017-07-26 15:29) 
[s:130]
回复

使用道具 举报

22

主题

114

回帖

180

积分

初级会员

积分
180
发表于 2020-12-16 16:09:22
111

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

本版积分规则

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

GMT+8, 2025-5-15 09:44 , Processed in 0.435489 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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