WM_HSCROLL은 스크롤바에서 생성되는 이벤트를 처리하는데
슬라이더바에서 생성된 이벤트 역시 이쪽으로 전송이 된다.
void CtestDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) |
nSBCode는 마우스의 이동방향이나 이동이 완료된 시점의 값이라던가 이런게 넘어 오는데
SB_THUMBTRACK은 마우스를 누른채 이동시(WM_MOUSEMOVE 이벤트 발생시)
SB_THUMBPOSITION은 마우스를 뗄 때 (WM_LBUTTONUP 발생시, 마지막 이동 위치)
SB_ENDSCROLL은 마우스를 뗄 때(WM_LBUTTONUP, nPos 값이 0으로 옴) 발생을 한다.
#define SB_THUMBTRACK 5
#define SB_THUMBPOSITION 4
#define SB_ENDSCROLL 8
SB_THUMBTRACK Drag scroll box to specified position. The current position is specified by the nPos parameter. SB_THUMBPOSITION Scroll to absolute position. The current position is specified by the nPos parameter. SB_ENDSCROLL End scroll. |
[링크 : https://msdn.microsoft.com/en-us/library/aa249894(v=vs.60).aspx]
[링크 : http://www.tipssoft.com/bulletin/tb.php/FAQ/419]
다만, SB_THUMBPOSITION와 SB_THUMBTRACK 외에는 nPos를 통해서 위치 값이 날아 오지 않으며
슬라이더를 클릭해서 이동시에는 SB_PAGEUP/SB_PAGEDOWN + SB_ENDSCROLL만 발생하므로
별도의 루틴을 통해 위치값을 받아와야 한다.
드래그와 클릭시 스크롤바 이동할때
이 경우에 대해서 제외하면 중복되게 오진 않는 것으로 파악된다.
if(nSBCode == SB_THUMBPOSITION || nSBCode == SB_ENDSCROLL) return; |
'Programming > C Win32 MFC' 카테고리의 다른 글
MFC 다이얼로그에 웹브라우저 넣기 (0) | 2017.10.24 |
---|---|
한글 코드 페이지 (0) | 2017.10.23 |
MFC 슬라이더 사용시 주의사항 (0) | 2017.10.19 |
MFC CMenu (0) | 2017.10.16 |
MFC 다이얼로그 창 크기 변경 못하도록 하기 (2) | 2017.10.11 |