2014-04-25 2 views
2

누군가가 "Enter"를 클릭하면 데이터를 수락 할 수있는 편집 컨트롤을 만들었습니다. 나는 그렇게하기 위해 서브 클래 싱을 사용했다. 거의 완벽하게 작동했습니다. 그러나 "Enter"를 클릭하면 매번 "Error"소리가납니다. ES_MULTILINE 및 ES_AUTOVSCROLL을 사용하여 무시하려고했으나 부분적으로 도움이되었습니다. 이제 "Enter"를 클릭 한 후 소리가 나지 않지만 텍스트 상자에 쓸모없는 "Enter"문자가 나타납니다. 삭제할 수 없습니다. 시스템 사운드를 우회하는 방법은 무엇입니까? 또는 해당 텍스트 상자에서 "Enter"문자를 삭제하십시오 (SetWindowText (handle, "") 도움이되지 않습니다).C++ winapi - 편집 컨트롤 서브 클래 싱 - "Enter"를 클릭 할 때 귀찮은 소리가 발생했습니다.

+2

'ES_WANTRETURN'을 사용해 보셨습니까? – nwp

+2

여러 줄이 아닌 편집 컨트롤에서 Enter 키를 누르는 것이 의미가 없으므로 경고음이 울립니다. Enter는 OK 버튼과 같은 윈도우의 기본 컨트롤을 작동하도록 예약되어 있습니다. 왜 쓸모없는 열쇠를 누르는거야? 대신에 무슨 일이 일어나야합니까? –

+0

@nwp - ES_WANTREURN은 아무 것도 변경하지 않았습니다. – user3366592

답변

3

ES_MULTILINE, ES_AUTOVSCROLL 또는 ES_WANTRETURN 스타일 플래그가 필요하지 않습니다.

에서 경고음이 울리지 않게하려면 해당 컨트롤에 대해 WM_CHAR 메시지를 처리하고 다른 모든 키에 대해 호출해야하는 기본 창 프로 시저를 호출하지 않고 VK_RETURN에 대해 0을 반환해야합니다.

+2

'WM_KEYDOWN' 메시지를 처리 ​​할 필요가 없습니다. 'WM_KEYDOWN' 디폴트 처리 ('TranslateMessage'에 대한 호출을 통해)를 처리하지 않으면 하나 이상의'WM_CHAR' 메시지를 생성합니다. 비프 음을 막기 위해서는'WM_CHAR '을 다루는 것으로 충분하다. – IInspectable

+0

일했습니다. 고마워요! – user3366592

+0

코드 예를 보려면 [Windows CE의 한 행 EDIT 컨트롤에서 Enter 키를 누를 때 경고음을 끄는 방법] (https://stackoverflow.com/a/3590126/1377770)을 참조하십시오. –

1

편집을위한 WM_CHAR의 기본 처리가 입력 및 탭과 같은 잘못된 문자에 대해 MessageBeep 함수를 호출한다는 것을 배웠습니다. 나는 편집 도구를 컨트롤 사이에 탭을 WM_KEYDOWN (스크롤 막대에 대해 Petzold로 표시됨) 가로 채어서 하위 클래스로 만들었지 만 탭을 눌렀을 때 신호음을 울리고있었습니다. 그래서 나는 탭을 누를 때 기본 처리를 피하기 위해 WM_CHAR을 가로 채고 경고음을 멈추게한다.