난 당신이 WM_VSCROLL/WM_HSCROLL 이벤트를 처리하는 방법에 대한 예는 말을 생각합니다. 그렇다면 첫 번째 단계는 해당 이벤트를 처리하는 것입니다. 해당 호출의 HIWORD (wParam) 값을 사용하지 말고 GetScrollInfo, GetScrollPos 및 GetScrollRange 함수를 대신 사용해야합니다.
다음은 MSDN - Using Scroll Bars에 의해 스니핑 된 예제 코드입니다. xCurrentScroll은 예를 들어 GetScrollPos()를 호출하기 전에 결정됩니다.
int xDelta; // xDelta = new_pos - current_pos
int xNewPos; // new position
int yDelta = 0;
switch (LOWORD(wParam)) {
// User clicked the scroll bar shaft left of the scroll box.
case SB_PAGEUP:
xNewPos = xCurrentScroll - 50;
break;
// User clicked the scroll bar shaft right of the scroll box.
case SB_PAGEDOWN:
xNewPos = xCurrentScroll + 50;
break;
// User clicked the left arrow.
case SB_LINEUP:
xNewPos = xCurrentScroll - 5;
break;
// User clicked the right arrow.
case SB_LINEDOWN:
xNewPos = xCurrentScroll + 5;
break;
// User dragged the scroll box.
case SB_THUMBPOSITION:
xNewPos = HIWORD(wParam);
break;
default:
xNewPos = xCurrentScroll;
}
[...]
// New position must be between 0 and the screen width.
xNewPos = max(0, xNewPos);
xNewPos = min(xMaxScroll, xNewPos);
[...]
// Reset the scroll bar.
si.cbSize = sizeof(si);
si.fMask = SIF_POS;
si.nPos = xCurrentScroll;
SetScrollInfo(hwnd, SB_HORZ, &si, TRUE);
무슨 뜻인지 확실하지 않습니다. 창에 WM_SCROLLWINDOW 메시지를 보냄으로써 스크롤 할 것을 명령하면, 창에 정확하게 응답해야합니다. 문제가 발생하면 창에 올바른 메시지가 전송되지 않았거나 부적절하게 메시지가 전달됩니다. 그래서 : 당신은 무엇을보고 있냐? – egrunin
egrunin은 지적했듯이 좀 더 구체적이어야합니다. 무엇을 스크롤하고 어떻게할까요? 그것은 텍스트입니까? 스크롤 상자를 제어 하시겠습니까? 구식 비트 맵 스크롤링인가요? 어떤 종류의 응용입니까? 경기? –
이 문서는 Petzold의 책에서 다룰 수 있습니다. 많은 Win32 관련 질문이 있습니다. –