在按钮里面写道
::SendMessage(m_edit.m_hWnd,WM_KEYDOWN,VK_BACK,0);
为什么不能发送??反而edit失去了焦点.
postmessage可以 我想请人解释一下
5 个解决方案
#1
跟具体的消息有关
键盘消息只能投递
键盘消息只能投递
#2
而且,只能在拥有焦点的情况下,才能接收并出来键盘消息
#3
m_edit.SendMessage(WM_CHAR, 'A', 1);
#4
m_edit.SendMessage(WM_CHAR, 8, 1);
#5
给个标准答案
EDIT其实是不处理WM_KEYDOWN消息。但是它为什么会响应按键呢?
这是因为Windows会将WM_KEYxx等消息会通过TranslateMessage函数转换,并生成WM_CHAR消息放入消息队列。
它实际上处理的是WM_CHAR等消息。
再解释一下为什么PostMessage可以,而SendMessage不行
大家都知道PostMessage会将消息放入窗口所在线程的消息队列中,也就是说会经过TranslateMessage的处理
但是SendMessage非常特殊,如果目标窗口属于就是当前调用SendMessage的线程时,消息就不再经过消息队列,而是直接进入EDIT的窗口处理函数。
也就是说没有经过TranslateMessage,EDIT只收到WM_KEYDOWN,而收不到WM_CHARxxx等消息,所以没有效果
#1
跟具体的消息有关
键盘消息只能投递
键盘消息只能投递
#2
而且,只能在拥有焦点的情况下,才能接收并出来键盘消息
#3
m_edit.SendMessage(WM_CHAR, 'A', 1);
#4
m_edit.SendMessage(WM_CHAR, 8, 1);
#5
给个标准答案
EDIT其实是不处理WM_KEYDOWN消息。但是它为什么会响应按键呢?
这是因为Windows会将WM_KEYxx等消息会通过TranslateMessage函数转换,并生成WM_CHAR消息放入消息队列。
它实际上处理的是WM_CHAR等消息。
再解释一下为什么PostMessage可以,而SendMessage不行
大家都知道PostMessage会将消息放入窗口所在线程的消息队列中,也就是说会经过TranslateMessage的处理
但是SendMessage非常特殊,如果目标窗口属于就是当前调用SendMessage的线程时,消息就不再经过消息队列,而是直接进入EDIT的窗口处理函数。
也就是说没有经过TranslateMessage,EDIT只收到WM_KEYDOWN,而收不到WM_CHARxxx等消息,所以没有效果