2012-12-13 38 views
0

它被問過,但我發現無論是MFC,或者是不是一個superclassed控制,或者也許我的關鍵字的選擇並不好(我的詞彙量是有限的)丁聲superclassed編輯控件 - WINAPI - windows7的

我正在用DevC++開發純win32和C++。我有一些Edit控件超類,其中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); 
     } 
    } 

回答

1

嘗試添加以下代碼到你的開關塊:

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

我試過(出於不同的原因),但它並不總是工作,例如按* control *鍵和* tab *。 * wParam *不同於* VK_TAB *! * WM_KEYDOWN *涵蓋所有情況 –