WM_MOUSEACTIVATE

인수

wParam : 활성화된 탑 레벨 부모 윈도우의 핸들이다.

LOWORD(lParam) : 마우스를 클릭한 위치인 히트 테스트값이다. 작업 영역을 클릭했으면 HTCLIENT값이 전달된다.

HIWORD(lParam) : 이 메시지를 유발시킨 마우스 메시지의 ID가 전달된다. 이 메시지의 리턴값에 따라 마우스 메시지는 큐에 붙여지거나 버려진다.

설명

사용자가 비활성화된 윈도우에서 마우스 버튼을 누를 때 이 메시지가 전달된다. 이미 활성화되어 있은 윈도우에서 마우스를 누를 때는 이 메시지가 전달되지 않는다. 윈도우는 이 메시지를 받았을 때 자신을 활성화할 것인지, 전달된 마우스 메시지는 어떻게 처리할 것인지 결정해야 한다. 이때 wParam과 lParam값을 읽어 사용자가 어떤 마우스 버튼을 화면의 어느 부분에서 눌렀는지를 조사할 수 있다. DefWindowProc으로 이 메시지를 보낼 경우 이 메시지는 부모 윈도우에게 전달되어 부모 윈도우가 차일드 윈도우의 활성화 여부를 결정한다.

부모 윈도우가 차일드를 활성화시킨다면 MA_NOACTIVATE(ANDEAT)를 리턴하여 시스템이 더 이상 이 메시지를 처리하지 않도록 해야 한다.

이 메시지에 의해 윈도우가 활성화되면 WM_ACTIVATE(APP), WM_NCACTIVATE, WM_SETFOCUS 메시지가 연속적으로 전달된다. 이 메시지는 마우스 버튼 누름 동작에 대해 포커스를 어떻게 처리할 것인가를 결정하기 위해 전달되는 것이다. 포커스가 이동된 후에 발생하는 것이 아니므로 포커스 변화에 따른 처리는 이 메시지에서 하지 않는 것이 옳다.

리턴

윈도우를 활성화할 것인가와 전달된 마우스 메시지를 어떻게 처리할 것인가를 지정한다.

설명

MA_ACTIVATE

윈도우를 활성화하며 마우스 메시지는 버리지 않는다.

MA_ACTIVATEANDEAT

윈도우를 활성화하며 마우스 메시지는 버린다.

MA_NOACTIVATE

윈도우를 활성화하지 않으며 마우스 메시지는 버리지 않는다.

MA_NOACTIVATEANDEAT

윈도우를 활성화하지도 않고 마우스 메시지를 버리지도 않는다.

예제

예제 1

다음 예제는 화면의 특정 위치에 "C"문자를 출력하는데 마우스 왼쪽 버튼으로 이 문자의 위치를 옮길 수 있다. 버튼을 누르는 즉시 문자의 위치가 바뀌지만 단 비활성화 상태에서 활성화 상태로 바뀔 때는 마우스 메시지를 처리하지 않는다.

LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
	HDC hdc;
	PAINTSTRUCT ps;
	static int x,y;

	switch(iMessage) {
	case WM_MOUSEACTIVATE:
		return MA_ACTIVATEANDEAT;
	case WM_LBUTTONDOWN:
		x=LOWORD(lParam);
		y=HIWORD(lParam);
		InvalidateRect(hWnd,NULL,TRUE);
		return 0;
	case WM_PAINT:
		hdc=BeginPaint(hWnd, &ps);
		TextOut(hdc,x,y,"C",1);
		EndPaint(hWnd, &ps);
		return 0;
	case WM_DESTROY:
		PostQuitMessage(0);
		return 0;
	}
	return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}

실행중의 모습은 다음과 같다.

WM_MOUSEACTIVATE 메시지를 받았을 때 윈도우를 활성화하기는 하지만 마우스 메시지를 버림으로써 이때는 WM_LBUTTONDOWN 메시지가 발생하지 않도록 하였다. 비활성화 상태에서 마우스 버튼을 클릭할 경우는 이 클릭을 윈도우 활성화로만 해석할 때 이런 식으로 처리한다. 활성화함과 동시에 마우스 메시지도 같이 처리하려면 MA_ACTIVATE를 리턴한다. 마우스 클릭으로는 활성화하지 않도록 하고 싶다면 MA_NOACTIVATE(ANDEAT)를 리턴해 주면 된다.

플랫폼

95이상

참조

 


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