0

之前有人问过,但我发现要么是 mfc,要么不是超类控件,或者我的关键字选择不好(我的词汇量有限)

我在 Devc++ 中使用纯 win32 和 c++ 进行开发。我有一些编辑控件超类,其中控制 Tab 键按下和 Return 键按下,但是每当我按下 Tab 时,都会有这种 Ding 声音非常烦人,不确定它是否存在,因为我做错了什么或什么。无论如何,我该如何删除它?

这是我第一次尝试超类化,所以如果您对代码有任何其他建议,请告诉我

代码:

    LRESULT APIENTRY EditSuperClassWndProc ( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam )
    {

        switch (message)
        {           
               case WM_KEYDOWN:

                      if ( isMyScreen )
                      {
                          if ( (int)wParam == VK_RETURN )
                          {
                              DWORD wparam = MAKELONG( 0, BN_CLICKED );
                              SendMessage( GetParent( hwnd ), WM_COMMAND, (WPARAM)wparam, (LPARAM)hButton );
                          }
                          else if ( (int)wParam == VK_TAB )
                          {
                               HWND nextInLine;

                               if( hwnd == hEditP )
                                   nextInLine = hEditL;
                               else if ( hwnd == hEditL )
                                   nextInLine = hEditP;

                               SendMessage( nextInLine, EM_SETSEL, (WPARAM)0, (LPARAM)-1 );
                               SetFocus( nextInLine );
                          }
                          else
                          {
                              return CallWindowProc( oldWndProc, hwnd, message, wParam, lParam );
                          }
                      }

                      return CallWindowProc( oldWndProc, hwnd, message, wParam, lParam );
                      break;

               default:

                     return CallWindowProc( oldWndProc, hwnd, message, wParam, lParam );
        }
    }
4

1 回答 1

1

尝试将以下代码添加到您的 switch 块中:

case WM_CHAR:
    if (wParam == VK_TAB)
    {
        return 0;
    }
    else
    {
        return CallWindowProc(oldWndProc, hwnd, message, wParam, lParam );
    }
    break;
于 2012-12-13T18:55:13.050 回答