EnableWindow的一个bug

chensunhui 2012-06-20 11:28:52
这个函数的功能就是启用禁用窗口,最近由于需要自己实现了一个函数,跟EnableWindow是一样的效果,但是,发现了这个函数的一个问题

有一个编辑框,通常对这个编辑框禁用以后,颜色会变灰并且无法输入东西

我发现的bug就是 当焦点处于编辑框上时,对这个编辑框使用EnableWindow(...,FALSE),颜色会变灰,但是仍然可以输入东西;当你焦点移到其他控件上去,比如鼠标点一下别的编辑框或按钮,就不会出现这种情况.


不知道表达清楚没有,大家可以试一下



代码举例, 窗口上放一个编辑框和一个按钮.

添加一个线程函数,两句话,大概像这样
sleep(2000);//等2秒
GetDlgItem(编辑框ID)->EnableWindow(FALSE);

按钮的事件中启动这个线程函数


运行以后,点一下按钮,然后迅速点到编辑框上,2秒应该够了吧? 然后你就会发现虽然编辑框灰掉了,你仍然可以输入东西....



不知道这算不算一个bug呢?
...全文
286 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Eleven 2012-06-20
  • 打赏
  • 举报
回复
线程函数中不要直接操作UI上的控件
schlafenhamster 2012-06-20
  • 打赏
  • 举报
回复
vc6上没发现这个问题。
实验如下:
对话框一个Edit。
初始化m_Edit。SetWindow("123");
打开一个10 秒定时器
SetTimer(1,10000,0);
把焦点放edit上
m_Edit.SetFocus();
return FALSE;



在定时器中:
KillTimer(1);
m_Edit.EnableWindow(FALSE);



运行,在edit中慢慢输入 字符,
到10秒后
edit变灰,已经没焦点,不能输入。
lllxy 2012-06-20
  • 打赏
  • 举报
回复
EnableWindow是使控件无效,应该是指在失去交点后无效,但你把光标放在控件中,还没有失去焦点,我认为不算bug.
august_zhao 2012-06-20
  • 打赏
  • 举报
回复
不算BUG,就如
[Quote=引用 1 楼 的回复:]
线程函数中不要直接操作UI上的控件
[/Quote]

子线程不要直接操作主线程UI,可以通过PostMessage

sevancheng 2012-06-20
  • 打赏
  • 举报
回复
应该算bug

hotpos 2012-06-20
  • 打赏
  • 举报
回复
试了下,XP下是这样,貌似应该算。

不过先 调用 SetReadOnly 设为只读,再调用EnableWindow就好了。

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧