社区
界面
帖子详情
CEdit框的焦点问题
dxk01
2009-01-16 07:53:49
一个对话框上的Edit控件,如果要让它获得焦点,用控件变量或控件指针调用SetFocus方法都可以实现。
但如果用SendMessage(hwnd,WM_SETFOCUS,0,0)或SendDlgItemMessage(IDC_EDIT1,WM_SETFOCUS)
可以获得焦点,但Edit就无法输入字符了,而且失去焦点后鼠标点击也不能再获得焦点。
不知道是什么原因?
...全文
307
15
打赏
收藏
CEdit框的焦点问题
一个对话框上的Edit控件,如果要让它获得焦点,用控件变量或控件指针调用SetFocus方法都可以实现。 但如果用SendMessage(hwnd,WM_SETFOCUS,0,0)或SendDlgItemMessage(IDC_EDIT1,WM_SETFOCUS) 可以获得焦点,但Edit就无法输入字符了,而且失去焦点后鼠标点击也不能再获得焦点。 不知道是什么原因?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
15 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
tobealv
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。
但不知道和这个有什么关系 。
VC 改变 C
Edit
编辑
框
背景颜色和文字颜色
此类实现了动态改变 C
Edit
编辑
框
背景颜色和文字颜色的功能,再辅助与获取
焦点
响应函数可以使编写的软件更加美观。
[最新] MFC C
Edit
控件添加边
框
的颜色
[最新] MFC C
Edit
控件添加边
框
的颜色
mfc按C
Edit
编辑
框
弹出自定义键盘
多个编辑
框
,单击每个编辑
框
都要弹出数字键盘,在编辑的位置弹出,并且数据直接编辑到当前的编辑
框
,按自定义键盘上的数字键,所对应的数据直接显示到要编辑的对话
框
中,工具用的VS2017
VC++界面编程之--自定义C
Edit
(编辑
框
)皮肤
自定义编辑
框
是登陆界面经常用到的效果,所以我也模仿站酷网的素材做了个。 要想继承CCustomDraw来完全自绘C
Edit
控件,是不太可行的方案,因为一旦你完全重绘,那么你需要额外做以下几件事: 1. C
Edit
光标的处理; 2. 当是密码提示时,需要弹窗提示用户大写打开。 3. 需要处理窗口文字的滚动。 这样看来,工作量会很大,而且效果也不一定好。 我这里想到相对比较好的解决方案是:子窗口+透明边
框
的C
Edit
。子窗口负责皮肤的绘制,而C
Edit
负责处理用户的输入。这样一来,可以利用到C
Edit
原有的一些特性,以保证原有的效果,并减轻我们开发的工作量。 与之配套的博客:http://blog.csdn.net/renstarone/article/details/12718283
MFC控件之编辑
框
C
Edit
028MFC控件之编辑
框
C
Edit
,MFC的编辑
框
及平时用的输入
框
,可以往里面输入文本或数字,编辑
框
对应的MFC类为C
Edit
,C
Edit
提供了窗口编辑
框
的功能
界面
15,980
社区成员
115,867
社区内容
发帖
与我相关
我的任务
界面
VC/MFC 界面
复制链接
扫一扫
分享
社区描述
VC/MFC 界面
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章