2013-08-30 2 views
0

버튼을 클릭하면이 버튼에 포커스가 설정됩니다.클릭 한 버튼에서 포커스 제거

C++에서 WIN API를 사용하여이 버튼에서 포커스를 제거하는 방법은 무엇입니까?

어쨌든 SendMessage WIN API로 버튼에서 포커스를 제거 할 수 있다고 생각합니다.

버튼의 핸들 만 있습니다.

또한 상위 양식 창에 액세스 할 수 없습니다.

는 거의 매번 사용하기 :: SetFocus 함수를 가능하다는 것을 알고 있지만, 내가 핸들을 찾을 경우에도 윈도우 양식에 액세스 할 수 있기 때문에 이번에는 내가 그것을 사용할 수 없습니다. 그래서 다른 해결책을 조언하십시오.

+0

이후에 초점을 맞추고 싶습니까? 'SetFocus'는 아마도 당신이 원하는 것일 것입니다. – chris

+1

왜 ['GetParent'] (http://msdn.microsoft.com/en-us/library/windows/desktop/ms633510.aspx)를 호출 할 수 없습니까? – IInspectable

답변

1

원하는 창 핸들/포인터와 함께 ::SetFocus (또는 MFC를 사용하는 경우 CWnd::SetFocus)을 호출하여 다른 창에 포커스를 놓기 만하면됩니다.

+0

하지만 부모 양식 창에 더 이상 액세스 할 수 없으면 어떻게해야합니까? 나는 접근 할 수 없다. 다른 것을 조언 해주세요. 감사합니다. – Jigberto

+0

액세스 할 수 없다는 것은 무엇을 의미합니까? 자식 윈도우에 접근 할 수 있다면 부모에게 (':: GetParent' 또는'CWnd :: GetParent'를 통해) 접근 할 수 있습니다. –

+0

:: SetFocus ((HWND) GetParent())가 작동하지 않을 수 있습니다. – ChatCloud

1

서브 클래스 버튼은 WM_SETFOCUS 메시지 인터페이스. 그러면 초점을 잃고있는 HWND이 표시됩니다. 필요한 경우 SetFocus()을 다시 HWND으로 바꿀 수 있습니다.

2

다른 창에 초점을 맞출 수는 있지만 초점이 실제로 필요한 것은 아닙니다. ::SetFocus(NULL)을 사용하는 것이 더 좋습니다. 이렇게하면 일부 Windows 메시지가 전송되지 않으므로 성능이 약간 향상 될 수 있습니다.

+0

최소 코드로 작업을 수행하는 최상의 솔루션입니다. 또한 기억해야합니다 :: SetSocus (hWnd) 성공할 수 있지만 NULL 항상 작동합니다. – ChatCloud

관련 문제