基本上我想要一个Enter来触发一个消息,当编辑控件聚焦并且用户按下回车时我可以捕获该消息。在线的所有解决方案似乎都是关于子类化的,但我想知道是否还有另一种方法呢?
例如,我的按钮具有标识符ID_BUTTON_SEND。这是我的想象;
case WM_COMMAND:
switch (LOWORD(wParam))
case ID_BUTTON_SEND
if ('enter was pressed')
do this
else
default
...你明白了:)我已经阅读了http://support.microsoft.com/kb/102589,但坦率地说,选项1对我来说没有多大意义。
干杯
答案 0 :(得分:3)
最好的方法是在调用TranslateMessage之前捕获它。因此,如果使用MFC,则覆盖CWnd :: PreTranslateMessage。如果仅使用Win API,那么只需在调用TranslateMessage之前检查消息泵中包含的内容。
答案 1 :(得分:3)
您可以捕获焦点更改事件,当编辑控件获得焦点事件时,只需将对话框默认按钮更改为* ID_BUTTON_SEND *按钮。然后当焦点丢失时,移除此默认按钮标志。
这意味着只要用户在编辑控件有效时点击进入,对话框就会自动触发* ID_BUTTON_SEND *默认按钮。
您可以通过将 BS_DEFPUSHBUTTON 添加到按钮的 GWL_STYLE 来使按钮成为默认按钮。
答案 2 :(得分:2)
重申KB文章。对于选项1,您实际上只需在WM_COMMAND中处理IDOK。
case WM_COMMAND:
if(wParam == IDOK){
ENTER WAS PRESSED
}else{
REGULAR EVENT HANDLING
}
这是一种检查Enter的简单方法。