2009-08-16 2 views
2

에 대한되지 트랩 VK_RETURN 키 나는이 서브 클래스 프로 시저가 호출됩니다 편집 상자에 문자를 입력 지금는 서브 클래스 편집 상자 제어

lpfnOldWndProc = (FARPROC)SetWindowLong(hEdit,GWL_WNDPROC, (DWORD)SubClassFunc); 




LRESULT FAR PASCAL SubClassFunc( HWND hWnd, 
           UINT Message, 
           WPARAM wParam, 
           LPARAM lParam) 
{ 

    switch(Message) 
    { 

    case WM_CHAR: 
     //Process this message to avoid message beeps. 
     if ((wParam == VK_RETURN) || (wParam == VK_TAB)) 
     { 
      //Do Something 
      return 0; 
     } 

     break; 
    case WM_KEYDOWN: 
     if ((wParam == VK_RETURN) || (wParam == VK_TAB)) { 
      //Do Something 
      return 0; 
     } 

     break ; 

    default: 
     break; 
    } 

    return CallWindowProc((WNDPROC)lpfnOldWndProc, hWnd, Message, wParam, lParam); 

} 

같은 편집 상자 컨트롤을 서브 클래 싱 할 수 있습니다. 하지만 키를 입력하면 입력 할 수 없습니다.

위의 절차에서 잘못된 것이 있습니까?

답변

6

아니요, 시스템은 WM_GETDLGCODE를 사용하여 컨트롤이 관심있는 키를 결정합니다. 기본적으로 편집 상자는 Return을 처리하지 않습니다 (대화 상자 프로시 저는 기본 단추를 눌러 해석합니다). VK_RETURNS가 전송됩니다. WM_GETDLGCODE 메시지를 처리하고 DLGC_WANTALLKEYS를 리턴하면 VK_RETURNS를 얻어야합니다.

MS 설명서는이 하위 분류 시나리오를 설명합니다.