win32 c ++在没有子类化的情况下检测编辑控件中的'enter'?

时间:2011-01-02 22:13:16

标签: c++ winapi button controls edit

基本上我想要一个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对我来说没有多大意义。

干杯

3 个答案:

答案 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的简单方法。