WinAPI: 더블클릭
더블클릭은 짧은 시간 안에 마우스 버튼을 두 번 빠르게 누르는 동작으로 프로그램 실행, 확정적인 선택 등에 많이 사용되고 있습니다. 왼쪽 마우스 더블클릭 메시지는 WM_LBUTTONDBCLICK입니다.
WM_LBUTTONDBCLICK 메시지를 쓰려면 WinMain의 코드 중 WndClass.style에 CS_DBCLKS를 추가해야 합니다.
WndClass.cbClsExtra = 0;
WndClass.cbWndExtra = 0;
WndClass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
WndClass.hCursor = LoadCursor(NULL, IDC_ARROW);
WndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
WndClass.hInstance = hInstance;
WndClass.lpfnWndProc = (WNDPROC)WndProc;
WndClass.lpszClassName = lpszClass;
WndClass.lpszMenuName = NULL;
WndClass.style = CS_VREDRAW | CS_HREDRAW | CS_DBLCLKS;
RegisterClass(&WndClass);
보편적으로 많이 사용되는 더블클릭 메시지를 지원하지 않고 꼭 CS_DBLCLKS 플래그를 추가해야 하는 이유는
1) 더블클릭을 검출하는데에는 그만큼의 실행시간의 감소가 요구되기 때문이며
2) WM_LBUTTONDOWN을 두 번 받는 것을 원할 수도 있기 때문입니다.
3) 또한 더블클릭으로 인정할 시간간격이나 마우스 포인터의 위치 따위의 규칙을 프로그램에서 자체적으로 만들어 쓸 수 있도록 하기 위한 이유도 있습니다.
WM_LBUTTONDBCLICK 메시지를 쓰려면 WinMain의 코드 중 WndClass.style에 CS_DBCLKS를 추가해야 합니다.
WndClass.cbClsExtra = 0;
WndClass.cbWndExtra = 0;
WndClass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
WndClass.hCursor = LoadCursor(NULL, IDC_ARROW);
WndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
WndClass.hInstance = hInstance;
WndClass.lpfnWndProc = (WNDPROC)WndProc;
WndClass.lpszClassName = lpszClass;
WndClass.lpszMenuName = NULL;
WndClass.style = CS_VREDRAW | CS_HREDRAW | CS_DBLCLKS;
RegisterClass(&WndClass);
보편적으로 많이 사용되는 더블클릭 메시지를 지원하지 않고 꼭 CS_DBLCLKS 플래그를 추가해야 하는 이유는
1) 더블클릭을 검출하는데에는 그만큼의 실행시간의 감소가 요구되기 때문이며
2) WM_LBUTTONDOWN을 두 번 받는 것을 원할 수도 있기 때문입니다.
3) 또한 더블클릭으로 인정할 시간간격이나 마우스 포인터의 위치 따위의 규칙을 프로그램에서 자체적으로 만들어 쓸 수 있도록 하기 위한 이유도 있습니다.
댓글
댓글 쓰기