【问题标题】:Ding sound while tabbing in superclassed edit control - winapi - windows7在超类编辑控件中切换时发出叮当声 - winapi - windows7
【发布时间】:2012-12-13 13:23:32
【问题描述】:

以前有人问过,但我发现要么是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 );
        }
    }

【问题讨论】:

    标签: winapi


    【解决方案1】:

    尝试将以下代码添加到您的开关块:

    case WM_CHAR:
        if (wParam == VK_TAB)
        {
            return 0;
        }
        else
        {
            return CallWindowProc(oldWndProc, hwnd, message, wParam, lParam );
        }
        break;
    

    【讨论】:

    • 我试过了(出于不同的原因),但它并不总是有效,例如按下 control 键和 tabwParamVK_TAB 不同! WM_KEYDOWN 涵盖所有情况
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-20
    • 2020-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多