WM_LBUTTONDBLCLK

인수

wParam : 키보드와 다른 마우스 버튼의 현재 상태를 나타내는 값이며 다음 플레그들의 조합값이다.

설명
MK_CONTROL Ctrl 키가 눌러져 있다.
MK_LBUTTON 마우스 왼쪽 버튼이 눌러져 있다.
MK_MBUTTON 마우스 가운데 버튼이 눌러져 있다.
MK_RBUTTON 마우스 오른쪽 버튼이 눌러져 있다.
MK_SHIFT Shift키가 눌러져 있다.

LOWORD(lParam), HIWORD(lParam) : 마우스의 현재 X, Y좌표이다. 이 좌표는 작업 영역의 원점을 기준으로 한 좌표이다.

설명

작업 영역 내부에서 마우스 왼쪽 버튼을 더블클릭할 때 이 메시지가 메시지 큐에 붙여진다. 마우스가 캡처되어 있으면 캡처한 윈도우로 메시지가 전달되며 그렇지 않으면 마우스 커서 아래의 윈도우로 전달된다. 이 메시지를 받기 위해서는 윈도우 클래스가 반드시 CS_DBLCLKS 스타일을 가져야 한다. 그렇지 않으면 단순히 마우스 누름 메시지만 두번 발생한다. 또한 두 마우스 클릭의 시간 간격은 시스템에 정의되어 있는 더블클릭 시간 간격내에 발생해야만 더블클릭으로 인정된다.

마우스 더블클릭시 WM_LBUTTONDOWN, WM_LBUTTONUP, WM_LBUTTONDBLCLK, WM_LBUTTONUP 네개의 메시지가 일련으로 발생한다. 두번째 WM_LBUTTONDOWN 메시지가 더블클릭으로 변경된다.

리턴

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

예제

예제 1

다음 예제는 더블클릭한 위치에 ^DblClk^문자열을 보여준다.

	WndClass.style=CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS;
	.....................

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

	switch(iMessage) {
	case WM_LBUTTONDBLCLK:
		x=LOWORD(lParam);
		y=HIWORD(lParam);
		InvalidateRect(hWnd,NULL,TRUE);
	case WM_PAINT:
		hdc=BeginPaint(hWnd, &ps);
		if (x) {
			SetTextAlign(hdc,TA_CENTER);
			TextOut(hdc,x,y,"^DblClk^",8);
		}
		EndPaint(hWnd, &ps);
		return 0;
	case WM_DESTROY:
		PostQuitMessage(0);
		return 0;
	}
	return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}

이 윈도우가 마우스 더블클릭 메시지를 받기 위해서는 반드시 윈도우 클래스에 CS_DBLCLKS 스타일을 가져야 한다. 만약 이 스타일을 가지지 않을 경우 WM_LBUTTONDOWN 메시지를 두번 받았을 때 메시지의 시간과 좌표를 직접 비교하여 커스텀 조건으로 더블클릭을 검출할 수 있다.

플랫폼

95이상

참조

 


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