Research Article

Development of the Object-Oriented Dynamic Simulation Models Using Visual C++ Freeware

Algorithm 11

Modeless dialog box: function ModelessDialogProc (part 2).
45.11case  WM_VSCROLL:
46.11   switch(LOWORD(wParam))
47.11    case  SB_TOP: //the HOME keyboard key is clicked
48.11     yInc = -yPos; break;
49.11    case  SB_BOTTOM://the END keyboard key is clicked
50.11     yInc = yMax - yPos; break;
51.11    case  SB_LINEUP://the top arrow is clicked
52.11     yInc = -1; break;
53.11    case  SB_LINEDOWN://the bottom arrow is clicked
54.11     yInc = 1; break;
55.11    case  SB_PAGEUP: //scroll bar shaft above the scroll box
56.11     yInc = min(-1, -yClient/yChar); break; // is clicked
57.11    case  SB_PAGEDOWN: // scroll bar shaft below the scroll
58.11     yInc = max(1, yClient/yChar); break; //box is clicked
59.11    case  SB_THUMBTRACK: // user is dragging the scroll box
60.11     yInc = HIWORD(wParam)-yPos; break;
61.11    default:
62.11     yInc = 0; break;
63.11  
64.11   yInc = max(-yPos, min(yInc, yMax - yPos));
65.11   if(yInc != 0)
66.11    yPos += yInc;
67.11    SetScrollPos(hwnd, SB_VERT, yPos, TRUE);
68.11    ScrollWindow(hwnd, 0, -yChar*yInc, NULL, NULL);
69.11  
70.11   break;
71.11case  WM_HSCROLL:
72.11   xPosOld = xPos;
73.11   switch(LOWORD(wParam))
74.11    case  SB_PAGERIGHT:
75.11    xPos += 10;  break;
76.11    case  SB_LINERIGHT:
77.11     xPos += 1;  break;
78.11    case  SB_PAGELEFT:
79.11     xPos -= 10;  break;
80.11    case  SB_LINELEFT:
81.11     xPos -= 1;  break;
82.11    case  SB_TOP:
83.11     xPos = xMin;  break;
84.11    case  SB_BOTTOM:
85.11     xPos = xMax;  break;
86.11    case  SB_THUMBTRACK:
87.11     xPos = HIWORD(wParam);  break;
88.11    default:  break;
89.11  
90.11   if(xPos > xMax) xPos = xMax;
91.11   if(xPos < xMin) xPos = xMin;
92.11   SetScrollPos(hwnd, SB_HORZ, xPos, TRUE);
93.11   if(xPos == xMax)
94.11    EnableScrollBar(hwnd, SB_HORZ, ESB_DISABLE_RIGHT);
95.11   if(xPos != xPosOld)
96.11    ScrollWindow(hwnd, xChar*(xPosOld-xPos), 0, NULL, NULL);
97.11   break;