2010-01-27 6 views
0

대화 상자에 키보드 포커스가있을 때 버튼에 나타나는 작은 점선 사각형을 어떻게 방지 할 수 있습니까? (전문 용어에 대한 사과와 함께). 한 시점에서 나는 버튼 WindowProc을 서브 클래 싱하고 일부 윈도우 메시지를 전복 함으로서 해법을 함께 해킹했지만 올바른 방법을 알고 싶었다.버튼 키보드 포커스 문제

키보드와 관련된 대화 상자의 다른 컨트롤에 실제로 문제가 있습니다. 이 다른 컨트롤은 실제로는 버튼이지만 그룹 상자 나 패널로 사용되며 작동하는 버튼이 아닙니다. 그러나 대화 상자에서 탭 키를 누르면이 그룹 상자의 "버튼"이 맨 위에 정적 컨트롤이 보이지 않는 전경이되어 버리는 것을 막을 수있었습니다. 위의 모두 들어

, 나는 WS_TABSTOP을 해제 시도 - 도움이되지 않았다)

+0

당신은 설정을 시도 할 수 ...

을 사람이 어디 창 메시지 0x128을 손쉽게 찾을 방법을 알고 그래서 경우에 (나는 또한 WM_SETFOCUS 위의 설명이지만 도움이되지 않았다으로 BN_SETFOCUS을 시도해보십시오. 한) WM_SETFOCUS 메시지가 수신되면 다른 것에 초점을 맞 춥니 다. –

+0

당신은 그룹 박스 버튼에서 실제로 작동한다고 믿습니다. 그러나 정상적인 버튼에서는 작동하지 않았으므로 점선으로 표시된 사각형을 막을 수 있었지만 다른 문제가 발생했습니다. (문제의 버튼은 실제로는 보통 버튼 모양의 푸시 체크 상자이지만 실제로는 "확인"할 때 푸시 상태입니다.) BS_ICON을 입력하고 상태에 따라 다른 아이콘을 그립니다. 따라서 WM_SETFOCUS를 사용할 수 없게되면 올바르게 작동하지 않습니다. – Mark

답변

0

올바른 방법은 기본 Windows를 사용하는 대신 자신 만의 버튼 컨트롤을 작성하는 것입니다..

또는 키보드 포커스를받지 못하게 할 수 있습니다.

+0

키보드 포커스를 얻지 못하게하는 방법은 무엇입니까? WS_TABSTOP이 무엇인지 모르겠습니다. 일반적인 능력 수준에 상관없이 우리 모두는 지식에 차이가 있습니다.) – Mark

+0

가장 신뢰할 수있는 방법은 단추에서 BN_SETFOCUS 알림을 수신 한 다음 다른 곳으로 포커스를 설정하는 것입니다. –

+0

THanks - 조금만보고하겠습니다. 이 작업을 수행 할 경우 – Mark

1

위에서 언급 한 두 가지 문제는 WndProcs를 서브 클래스 화하고 메시지 0x128에 대한 응답으로 0을 반환하고이를 버림으로써 해결되었습니다. Spy ++도이 메시지 0x128을 식별 할 수 없었고 어떤 헤더에도이 메시지가 없습니다. 대화 상자에서 탭이 처음 눌려지면 대화 상자의 모든 컨트롤로 전송됩니다.

+0

WM_UPDATEUISTATE 메시지입니다 : "창에서 큐를 가져 오는 창에 W M_UPDATEUISTATE 메시지는 일반적으로 새로운 상태에 따라 큐를 다시 그리거나 지울 수 있도록 자체를 무효화합니다. " -http : //blogs.msdn.com/oldnewthing/archive/2005/05/03/414317.aspx – Mark