for (y = 0; y < YCELLS; y++)\r
for (x = 0; x < XCELLS; x++)\r
{\r
- ch = (WCHAR)((256 * infoPtr->iPage) + (XCELLS * y) + x);\r
+ ch = (WCHAR)((XCELLS * (y + infoPtr->iYStart)) + x);\r
\r
TagFontToCell(&infoPtr->Cells[y][x], ch);\r
\r
INT Value,\r
INT Pos)\r
{\r
+ INT iYDiff, iOldYStart = infoPtr->iYStart;\r
+\r
switch (Value)\r
{\r
case SB_LINEUP:\r
- infoPtr->iPage -= 1;\r
+ infoPtr->iYStart -= 1;\r
break;\r
\r
case SB_LINEDOWN:\r
- infoPtr->iPage += 1;\r
+ infoPtr->iYStart += 1;\r
break;\r
\r
case SB_PAGEUP:\r
- infoPtr->iPage -= 16;\r
+ infoPtr->iYStart -= YCELLS;\r
break;\r
\r
case SB_PAGEDOWN:\r
- infoPtr->iPage += 16;\r
+ infoPtr->iYStart += YCELLS;\r
break;\r
\r
- case SB_THUMBPOSITION:\r
- infoPtr->iPage = Pos;\r
+ case SB_THUMBTRACK:\r
+ infoPtr->iYStart = Pos;\r
break;\r
\r
default:\r
break;\r
}\r
\r
- infoPtr->iPage = max(0,\r
- min(infoPtr->iPage, 255));\r
+ infoPtr->iYStart = max(0,\r
+ min(infoPtr->iYStart, 255*16));\r
\r
- SetScrollPos(infoPtr->hMapWnd,\r
- SB_VERT,\r
- infoPtr->iPage,\r
- TRUE);\r
+ iYDiff = iOldYStart - infoPtr->iYStart;\r
+ if (iYDiff)\r
+ {\r
+ SetScrollPos(infoPtr->hMapWnd,\r
+ SB_VERT,\r
+ infoPtr->iYStart,\r
+ TRUE);\r
\r
- InvalidateRect(infoPtr->hMapWnd,\r
- NULL,\r
- TRUE);\r
+ if (abs(iYDiff) < YCELLS)\r
+ {\r
+ RECT rect;\r
+ GetClientRect(infoPtr->hMapWnd, &rect);\r
+ rect.top += 2;\r
+ rect.bottom -= 2;\r
+ ScrollWindowEx(infoPtr->hMapWnd,\r
+ 0,\r
+ iYDiff * infoPtr->CellSize.cy,\r
+ &rect,\r
+ &rect,\r
+ NULL,\r
+ NULL,\r
+ SW_INVALIDATE);\r
+ }\r
+ else\r
+ {\r
+ InvalidateRect(infoPtr->hMapWnd,\r
+ NULL,\r
+ TRUE);\r
+ }\r
+ }\r
}\r
\r
\r