WM_SETFOCUS

인수

wParam : 키보드 포커스를 잃은 윈도우의 핸들이 전달된다. 포커스를 잃은 윈도우가 없으면 NULL이다.

설명

이 함수는 키보드 포커스가 이동될 때 발생한다. 포커스를 가진다는 말은 키보드 입력을 받을 수 있다는 뜻이며 한번에 오직 하나의 윈도우만 포커스를 가질 수 있다. 포커스는 윈도우의 활성화 상태 변경에 따라 이동되는데 새로 활성화된 윈도우나 그 차일드가 포커스를 가진다. 또는 SetFocus 함수에 의해 명시적으로 포커스 이동이 발생할 수도 있다.

이 메시지는 윈도우가 키보드 포커스를 얻은 후에 전달된다. 즉, 이 메시지를 받았을 때는 이미 키보드 포커스가 이동 완료된 후이다. 만약 포커스를 다른 윈도우에게 양보하고자 한다면 이 메시지를 받자 마자 SetFocus 함수를 호출하여 다른 윈도우(주로 차일드 중 하나)에게 포커스를 건네 주어야 한다. 캐럿 처리를 위해 이 메시지를 프로그래밍하는데 이 메시지를 받았을 때 캐럿을 보여주면 된다.

리턴

메시지를 처리했으면 0을 리턴해 준다.

예제

예제 1

다음 예제는 작업 영역에 캐럿을 보여 준다.

LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
	switch(iMessage) {
	case WM_SETFOCUS:
		CreateCaret(hWnd, NULL, 4, 32);
		SetCaretPos(10,10);
		ShowCaret(hWnd);
		return 0;
	case WM_KILLFOCUS:
		DestroyCaret();
		return 0;
	case WM_DESTROY:
		PostQuitMessage(0);
		return 0;
	}
	return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}

포커스를 얻었을 때 캐럿을 만들고 포커스를 읽으면 캐럿을 다시 파괴해 주어야 한다. 캐럿은 시스템 전역적으로 하나밖에 없는 유일한 자원이므로 키보드 포커스가 없을 때는 파괴해 주어 다른 프로그램이 캐럿을 사용할 수 있도록 해 주어야 한다.

플랫폼

95이상

참조

WM_FILLFOCUS


written by http://www.winapi.co.kr