社区
界面
帖子详情
CEdit框的焦点问题
dxk01
2009-01-16 07:53:49
一个对话框上的Edit控件,如果要让它获得焦点,用控件变量或控件指针调用SetFocus方法都可以实现。
但如果用SendMessage(hwnd,WM_SETFOCUS,0,0)或SendDlgItemMessage(IDC_EDIT1,WM_SETFOCUS)
可以获得焦点,但Edit就无法输入字符了,而且失去焦点后鼠标点击也不能再获得焦点。
不知道是什么原因?
...全文
386
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。
但不知道和这个有什么关系 。
mfc C
Edit
焦点
获取
做简单的文本查看器,主要是将txt的内容根据一定规则转换为对应行的另一个txt,用同一个滚动条控制两个
edit
显示
框
显示txt内容(两个
edit
显示
框
的内容同时上下滚动),可以进行简单搜索查询功能: //IDC_
EDIT
是控件的ID 1、搜索查询,主要是要获取光标位置 m_
EDIT
.SetSel(pos,pos,TRUE); //设置 int n ,m; m_
EDIT
.GetSel(
mfc窗口 失去
焦点
方法_MFC C
Edit
失去
焦点
处理程序
I am creating a MFC program using the document/view architecture. In the view I call on a cell class that extends C
Edit
to draw a text box. That works fine, however, when I try to catch a lose focus...
C
Edit
焦点
问题
发现C
Edit
在程序启动时没有默认
焦点
然后把父窗口OnInitDialog的返回值从FALSE改成TURE,就可以有默认
焦点
了
mfc非模态对话
框
Child窗口C
Edit
控件获取不到
焦点
问题
遇到的
问题
就是创建一个非模态的子窗口。发现子窗口上的
edit
控件总是不能被激活,开始担心自己工程出
问题
了,于是新建了一个sdi,如图
问题
依然存在,既然如此那就在新工程中找
问题
,先设置对话
框
style,popup/overlap都能正常使用,再试试模式对话
框
(有点没必要,因为模式对话
框
不能是child)依然没
问题
,为了保守起见,还是多托几个控件靠谱,发现只有
edit
无效,尴尬。那就只能对
edit
下手
mfc窗口 失去
焦点
方法,MFC C
Edit
失去
焦点
处理程序
I am creating a MFC program using the document/view architecture. In the view I call on a cell class that extends C
Edit
to draw a text box. That works fine, however, when I try to catch a lose focus...
界面
15,976
社区成员
115,866
社区内容
发帖
与我相关
我的任务
界面
VC/MFC 界面
复制链接
扫一扫
分享
社区描述
VC/MFC 界面
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章