硬汉嵌入式论坛

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

[emWin] 关于重映射BUTTON回调函数后导致button无显示问题!求助

[复制链接]

1

主题

19

回帖

22

积分

新手上路

积分
22
发表于 2016-2-22 11:01:34 | 显示全部楼层 |阅读模式
我采用资源表的方式创建了button,
为了处理更清晰,我使用WM_SetCallback为某些button指定不同的回调函数,但是指定后,原来显示的button就不显示了,尝试很多方法都没搞定,请大家指导!!
回复

使用道具 举报

1

主题

19

回帖

22

积分

新手上路

积分
22
 楼主| 发表于 2016-2-22 11:08:48 | 显示全部楼层
自己顶起,请大家帮忙啊。。。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106856
QQ
发表于 2016-2-22 11:13:10 | 显示全部楼层
估计是哪里程序有问题,一定要对指定的按钮做回调重映射,也就是句柄一定要是这个按钮的,另外就是按钮的ID号没有重复吧,不可以重复。
回复

使用道具 举报

1

主题

19

回帖

22

积分

新手上路

积分
22
 楼主| 发表于 2016-2-22 11:33:14 | 显示全部楼层
hWin= app_WinBatMsgFun();                                   //这个是我采用资源表创建的对话框,里面有按钮等,
GUI_Delay(50);
//到这里可以正常显示,按钮等都正常;   
                                                                                                   
hItem = WM_GetDialogItem(hWin,ID_BUTTON_2);
WM_SetCallback(hItem,_WinBatMsgUpCb);
GUI_Delay(50);
//上面为BUTTON2设置其他回调函数,然后BUTTON2就消失了;


硬汉哥,我测试了,对应的控件句柄没有错,和创建的时候是一致的,搞不清为什么会消失。。
回复

使用道具 举报

5

主题

26

回帖

15

积分

新手上路

积分
15
发表于 2016-2-22 14:46:13 | 显示全部楼层
回调函数应该是为按钮所在的父窗口设置的,而不是直接为某一个按钮设置吧。

因此,如下语句应该不对:
hItem = WM_GetDialogItem(hWin,ID_BUTTON_2); //获取了对话框ID为ID_BUTTON_2的按钮对象句柄
WM_SetCallback(hItem,_WinBatMsgUpCb);  //这一条是为按钮设置回调函数,这样不对

按理说应该是:
hWin= app_WinBatMsgFun();  
WM_SetCallback(hWin,_WinBatMsgUpCb);  //这样才对
回复

使用道具 举报

1

主题

19

回帖

22

积分

新手上路

积分
22
 楼主| 发表于 2016-2-22 22:29:08 | 显示全部楼层

回 yl19823442 的帖子

yl19823442:回调函数应该是为按钮所在的父窗口设置的,而不是直接为某一个按钮设置吧。

因此,如下语句应该不对:
hItem = WM_GetDialogItem(hWin,ID_BUTTON_2); //获取了对话框ID为ID_BUTTON_2的按钮对象句柄
WM_SetCallback(hItem,_WinBatMsgUpCb);  //这一条是为按钮设置回调函 .. (2016-02-22 14:46) 
我看示例中有对edit,listview等控件设置单独的回调函数,应该button也是可以的,而且设置完后可以进入对应功能函数,只是button无显示了!
回复

使用道具 举报

5

主题

26

回帖

15

积分

新手上路

积分
15
发表于 2016-2-23 08:33:17 | 显示全部楼层
哦,这样啊,我再研究一下,我一般都是设置父窗口的回调函数处理的。[s:150]
回复

使用道具 举报

1

主题

19

回帖

22

积分

新手上路

积分
22
 楼主| 发表于 2016-2-24 14:35:09 | 显示全部楼层

回 yl19823442 的帖子

yl19823442:哦,这样啊,我再研究一下,我一般都是设置父窗口的回调函数处理的。[s:150]  (2016-02-23 08:33) 
关键如果是资源列表创建的话,由于每个控件的回调函数都是进入到父窗口回调函数中,这样的话每个控件都在这个回调函数里面处理,没有分离开来,很难维护,特别当我们从builder调整设计后生成代码,这代码如果要更新,难道从回调函数的每个case分支来copy过去吗?这样很麻烦啊。 如果更改了回调函数,则很容易,只需要在创建完窗口后把更改回调函数的代码copy过去即可,很容易维护。  
请问你们怎么做的?我采用这个GUI,用builder先生成框架。
回复

使用道具 举报

1

主题

19

回帖

22

积分

新手上路

积分
22
 楼主| 发表于 2016-2-24 14:36:59 | 显示全部楼层

回 eric2013 的帖子

eric2013:估计是哪里程序有问题,一定要对指定的按钮做回调重映射,也就是句柄一定要是这个按钮的,另外就是按钮的ID号没有重复吧,不可以重复。 (2016-02-22 11:13) 
eric,请问你们的回调函数是如何更改的?

如下内容:
关键如果是资源列表创建的话,由于每个控件的回调函数都是进入到父窗口回调函数中,这样的话每个控件都在这个回调函数里面处理,没有分离开来,很难维护,特别当我们从builder调整设计后生成代码,这代码如果要更新,难道从回调函数的每个case分支来copy过去吗?这样很麻烦啊。 如果更改了回调函数,则很容易,只需要在创建完窗口后把更改回调函数的代码copy过去即可,很容易维护。  
请问你们怎么做的?我采用这个GUI,用builder先生成框架。
回复

使用道具 举报

6

主题

19

回帖

37

积分

新手上路

积分
37
发表于 2016-2-24 21:22:18 | 显示全部楼层
能看一下你自定义的回调吗,回调里不处理的消息忘记调用BUTTON本来的回调了?
回复

使用道具 举报

1

主题

19

回帖

22

积分

新手上路

积分
22
 楼主| 发表于 2016-2-24 21:30:41 | 显示全部楼层

回 sealedghost 的帖子

sealedghost:能看一下你自定义的回调吗,回调里不处理的消息忘记调用BUTTON本来的回调了? (2016-02-24 21:22) 
我自定义的回调和默认回调函数架构一样,只是处理信息有差别,现在我已经放弃为每个button定义回调函数了!还是在公用里处理,只是这个公用回调函数另外指派,也具有较好的维护性,至于为什么为button指派单独回调函数会清除button真不知道为什么。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-7 18:55 , Processed in 0.267338 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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