社区
界面
帖子详情
CEdit框的焦点问题
dxk01
2009-01-16 07:53:49
一个对话框上的Edit控件,如果要让它获得焦点,用控件变量或控件指针调用SetFocus方法都可以实现。
但如果用SendMessage(hwnd,WM_SETFOCUS,0,0)或SendDlgItemMessage(IDC_EDIT1,WM_SETFOCUS)
可以获得焦点,但Edit就无法输入字符了,而且失去焦点后鼠标点击也不能再获得焦点。
不知道是什么原因?
...全文
361
15
打赏
收藏
CEdit框的焦点问题
一个对话框上的Edit控件,如果要让它获得焦点,用控件变量或控件指针调用SetFocus方法都可以实现。 但如果用SendMessage(hwnd,WM_SETFOCUS,0,0)或SendDlgItemMessage(IDC_EDIT1,WM_SETFOCUS) 可以获得焦点,但Edit就无法输入字符了,而且失去焦点后鼠标点击也不能再获得焦点。 不知道是什么原因?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
15 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
weed2007
2011-09-21
打赏
举报
回复
激动啊,,终于找到了
boboyouling
2011-03-25
打赏
举报
回复
正需要的东西,跟楼主一样,原来窗体没有激活。
沧海笑科技
2010-09-27
打赏
举报
回复
此贴似救命稻草!
Raul_Shao
2009-11-26
打赏
举报
回复
UP !UP !好贴啊!
dxk01
2009-01-22
打赏
举报
回复
谢谢各位,结帖
levelmouse
2009-01-22
打赏
举报
回复
恩,8楼的可行。
楼上分析很透彻啊!
Show_Mike
2009-01-22
打赏
举报
回复
[Quote=引用楼主 shequay 的帖子:]
一个对话框上的Edit控件,如果要让它获得焦点,用控件变量或控件指针调用SetFocus方法都可以实现。
但如果用SendMessage(hwnd,WM_SETFOCUS,0,0)或SendDlgItemMessage(IDC_EDIT1,WM_SETFOCUS)
可以获得焦点,但Edit就无法输入字符了,而且失去焦点后鼠标点击也不能再获得焦点。
不知道是什么原因?
[/Quote]
你的问题实际上就是"SetFocus()"与"SendMessage()"的区别在哪?
回答如下:
1.SetFocus函数要做3件事:1)发送kill_focus到前一个窗口;2)发送set_focus到现有窗口;3)让现有窗口出于激活状态.
2.SendMessage只做第2件事,并通过回调函数wndproc处理相应事件.
由此对比,不难发现出现你所说现象的原因.
BenzKuai
2009-01-21
打赏
举报
回复
经过仔细读了MSDN后发现。如果要获得键盘输入,就要是 active窗口。所以LZ用消息当然是可以的,只是你少一步没做。
如下代码片段:
m_edtTest.SendMessage(WM_SETFOCUS,0,0);
m_edtTest.SendMessage(WM_ACTIVATE, WA_ACTIVE,0);
这样就可以获得键盘输入。
www.bysj580.cn
schlafenhamster
2009-01-21
打赏
举报
回复
The framework calls this member function
after gaining the input focus
.
所以SetFocus()函数不是WM_SETFOCUS消息.SetFocus()需要把原始输入队列连接到Edit窗口.
schlafenhamster
2009-01-21
打赏
举报
回复
是不是bug?
dxk01
2009-01-21
打赏
举报
回复
4楼,你的方法仅仅是给对话框本身发消息,与要求不符
levelmouse
2009-01-21
打赏
举报
回复
::SendMessage(this->m_hWnd,WM_SETFOCUS,0,0);
dxk01
2009-01-18
打赏
举报
回复
2楼误会我的意思了,通过控件指针或控件变量是可以实现的,我想知道为什么用发送消息的方法不行。
nkwanglei
2009-01-16
打赏
举报
回复
我猜测啊,可能你用的全局的::SendMessage,这样不知道是哪个窗体上的Edit控件,所以出了问题
如果 GetDlgItem(IDC_EDIT1)->SetFocus(),就可以,可以考虑通过给这个窗体对象发消息,让窗体设置焦点。
冰霜icefrost
2009-01-16
打赏
举报
回复
之前没注意到这个问题,我测试了一下,确实如此。
我查了一下,SetFocus函数执行了两个操作,一个是向最后一个有焦点的Window发了一个WM_KILLFOCUS,之后又发了一个WM_SETFOCUS。
但不知道和这个有什么关系 。
全球各国汇率、短长期、政策利率数据(1914-2024.3)
根据国际货币基金组织(IMF)等平台的数据,整理了全球各国的兑美元汇率,短期利率、长期利率、政策利率数据,时间范围最新至2024年3月,希望对大家有所帮助 一、数据介绍 数据名称:全球各国汇率、短长期、政策利率数据 数据范围:全球国家 样本数量:76403条 数据年份:1914-2024.3 数据说明:包含兑美元汇率、短期利率、长期利率、政策利率 更新时间:2024年3月 二、指标范围 单位 国家 年份 兑美元汇率-月度均值 兑美元汇率-年度均值 短期利率 长期利率 政策利率
YOLO算法实验室电子仪器电源状态目标检测数据集-60张-标注类别为关机状态-开机状态.zip
YOLOv11目标检测实战项目
界面
15,976
社区成员
115,866
社区内容
发帖
与我相关
我的任务
界面
VC/MFC 界面
复制链接
扫一扫
分享
社区描述
VC/MFC 界面
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章