on WM_VSCROLL */
| 725 | |
| 726 | /* on WM_VSCROLL */ |
| 727 | void |
| 728 | onMSNH_VScroll(HWND hWnd, WPARAM wParam, LPARAM lParam) |
| 729 | { |
| 730 | PNHMapWindow data; |
| 731 | SCROLLINFO si; |
| 732 | int yNewPos; |
| 733 | int yDelta; |
| 734 | |
| 735 | /* get window data */ |
| 736 | data = (PNHMapWindow) GetWindowLong(hWnd, GWL_USERDATA); |
| 737 | |
| 738 | switch (LOWORD(wParam)) { |
| 739 | /* User clicked shaft left of the scroll box. */ |
| 740 | case SB_PAGEUP: |
| 741 | yNewPos = data->yPos - data->yPageSize; |
| 742 | break; |
| 743 | |
| 744 | /* User clicked shaft right of the scroll box. */ |
| 745 | case SB_PAGEDOWN: |
| 746 | yNewPos = data->yPos + data->yPageSize; |
| 747 | break; |
| 748 | |
| 749 | /* User clicked the left arrow. */ |
| 750 | case SB_LINEUP: |
| 751 | yNewPos = data->yPos - 1; |
| 752 | break; |
| 753 | |
| 754 | /* User clicked the right arrow. */ |
| 755 | case SB_LINEDOWN: |
| 756 | yNewPos = data->yPos + 1; |
| 757 | break; |
| 758 | |
| 759 | /* User dragged the scroll box. */ |
| 760 | case SB_THUMBTRACK: |
| 761 | yNewPos = HIWORD(wParam); |
| 762 | break; |
| 763 | |
| 764 | default: |
| 765 | yNewPos = data->yPos; |
| 766 | } |
| 767 | |
| 768 | yNewPos = max(0, min(ROWNO - data->yPageSize + 1, yNewPos)); |
| 769 | if (yNewPos == data->yPos) |
| 770 | return; |
| 771 | |
| 772 | yDelta = yNewPos - data->yPos; |
| 773 | data->yPos = yNewPos; |
| 774 | |
| 775 | ScrollWindowEx(hWnd, 0, -data->yScrTile * yDelta, (CONST RECT *) NULL, |
| 776 | (CONST RECT *) NULL, (HRGN) NULL, (LPRECT) NULL, |
| 777 | SW_INVALIDATE | SW_ERASE); |
| 778 | |
| 779 | if (!GetNHApp()->bHideScrollBars) { |
| 780 | si.cbSize = sizeof(si); |
| 781 | si.fMask = SIF_POS; |
| 782 | si.nPos = data->yPos; |
| 783 | SetScrollInfo(hWnd, SB_VERT, &si, TRUE); |
| 784 | } |
no test coverage detected