硬汉嵌入式论坛

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

[emWin] 又出BUG了

[复制链接]

268

主题

597

回帖

1401

积分

至尊会员

积分
1401
发表于 2017-4-24 23:48:25 | 显示全部楼层 |阅读模式
哎,搞个实际的界面,怎么问题这么多呢。。。
情况是这样的:
在设置EDIT里面的参数时,要弹出数字键盘,我设计的操作流程是:
在EDIT的WM_NOTIFICATION_CLICKED消息里面创建键盘页面,键盘页面使用的是FRAME框架结构。
而这个键盘FRAME为了使用方便,使用了CLOSE按钮,可以用来关闭。
现在遇到的第一个问题是:当多次单击EDIT(相同或不相同)时,每次都会创建一个键盘。
为了解决此问题,我在创建键盘时,使用了判断条件,如下

if(WM_IsWindow(h_number_pad))
{        
    return ;
}
page_number_pad();
使用WM_IsWindow()来判断键盘页面的句柄是否有效。而这个h_number_pad是全局变量。
即,当使用CLOSE按钮关闭(删除)键盘页面时,该句柄仍然保存了句柄值。

使用上述方法时,在同一个页面内有效,即,多次单击EDIT时,不会创建多个页面,只是已经创建的页面变为未选定状态,标题栏变色成未选定。
但是,当跳转到别的设置界面时,再次单击EDIT就无法再显示出键盘了。
单步调试的时候,发现WM_IsWindow(h_number_pad)这个居然还是有效的,因此,并没有调用page_number_pad()重新创建页面。
这就很神奇了,不知道是为什么,当然,h_number_pad值还是原来创建的那个页面的句柄。

另外,在单击EDIT弹出键盘这种功能实现上,有没有什么比较好的方法呢
回复

使用道具 举报

9

主题

42

回帖

69

积分

初级会员

大牛的形成也是时间与技术的积累

积分
69
QQ
发表于 2017-4-25 08:56:52 | 显示全部楼层
WM_IsWindow判断是有点问题,你直接用if(h_number_pad)return; 就好了,在窗体被关闭或删除时,手动赋值h_number_pad = 0;
回复

使用道具 举报

268

主题

597

回帖

1401

积分

至尊会员

积分
1401
 楼主| 发表于 2017-4-25 09:36:34 | 显示全部楼层

回 costar 的帖子

costar:WM_IsWindow判断是有点问题,你直接用if(h_number_pad)return; 就好了,在窗体被关闭或删除时,手动赋值h_number_pad = 0; (2017-04-25 08:56) 
关键是,通过FRAME的COLSE BUTTON来关闭的呀。
这个FRAME控件好像都没有通知代码啊,都不知道FRAME是否被关闭了
不像BUTTON这样的,能收到WM_NOTIFICATION_RELEASED这种通知的。
所以,没法手动清零句柄
回复

使用道具 举报

7

主题

42

回帖

63

积分

初级会员

积分
63
发表于 2017-4-25 22:57:08 | 显示全部楼层
我是在每次调用小键盘时先删除小键盘窗口。
回复

使用道具 举报

9

主题

42

回帖

69

积分

初级会员

大牛的形成也是时间与技术的积累

积分
69
QQ
发表于 2017-4-26 08:48:55 | 显示全部楼层
控件上的任何一个操作都有通知代码,你的FRAME CLOSE BUTTON会触发WM_DELETE消息,你在这里面处理
回复

使用道具 举报

268

主题

597

回帖

1401

积分

至尊会员

积分
1401
 楼主| 发表于 2017-4-26 10:16:17 | 显示全部楼层

回 costar 的帖子

costar:控件上的任何一个操作都有通知代码,你的FRAME CLOSE BUTTON会触发WM_DELETE消息,你在这里面处理 (2017-04-26 08:48) 
嗯,貌似是这样的
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-16 00:34 , Processed in 0.291369 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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