In the MainWndProc function, add code to process WM_SIZE messages. This code shows or hides the scrollbars, as needed, and it adjusts the scrollbar ranges and positions.
LRESULT WINAPI MainWndProc (HWND hWnd, UINT Message, WPARAM wParam, LPARAM lParam){static BOOL fSizeInUse=FALSE; /* Flag to avoid processing multiple WM_SIZE messages */switch (Message){HANDLE_MSG (hWnd, WM_CREATE, Window_OnCreate);HANDLE_MSG (hWnd, WM_TIMER, Window_OnTimer);HANDLE_MSG (hWnd, WM_COMMAND, Window_OnCommand);HANDLE_MSG (hWnd, WM_PALETTECHANGED, Window_OnPaletteChanged);HANDLE_MSG (hWnd, WM_QUERYNEWPALETTE, Window_OnQueryNewPalette);HANDLE_MSG (hWnd, WM_ACTIVATE, Window_OnActivate);HANDLE_MSG (hWnd, WM_PALETTEISCHANGING, Window_OnPaletteChanging);HANDLE_MSG (hWnd, WM_SYSCOLORCHANGE, Window_SysColorChange);HANDLE_MSG (hWnd, WM_PAINT, Window_OnPaint);HANDLE_MSG (hWnd, WM_DESTROY, Window_OnDestroy);case WM_SIZE:/* Avoid processing other WM_SIZE messages while we are processing this one */if (fSizeInUse == TRUE)return (0);fSizeInUse = TRUE;/* Turn off scrolling and exit if the window is minimized, orif there is no bitmap */if ((wParam == SIZE_MINIMIZED) || (!Data.BitmapHandle.Flags.Allocated)){SetScrollRange(hWnd, SB_VERT, 0, 0, FALSE);SetScrollRange(hWnd, SB_HORZ, 0, 0, FALSE);fSizeInUse = FALSE;return (0);}/* Initialize the client height and width using message parameters */ClientHeight = HIWORD(lParam);ClientWidth = LOWORD(lParam);/* Update the values, separating client information from scrollbar information */CalcClientMetrics (hWnd,&ClientWidth,&ClientHeight,&RightBarThickness,&BottomBarThickness);/* Use the offsets of the display to initialize scroll positions */XScrollPosition = -rLeadDest.left;YScrollPosition = -rLeadDest.top;/* Calculate the range and scroll position of the vertical scroll bar */if (ClientHeight >= DisplayHeight){ /* We do not need a vertical scroll bar *//* Use the full display height, and turn off the scroll bar */rLeadDest.bottom = DisplayHeight;rLeadDest.top = 0;SetScrollRange(hWnd, SB_VERT, 0, 0, FALSE);}else{ /* We need a vertical scrollbar *//* The range and position of the vertical scrollbar depend onwhether there is also a horizontal scrollbar */if (ClientWidth >= DisplayWidth){ /* There will not be a horizontal scroll bar *//* Calculate the range without the horizontal scrollbar */YScrollRange = DisplayHeight - DisplayWidth;/* If the expected scroll position would leave blank space,adjust the scroll position and reposition the display rectangle */if (YScrollPosition > YScrollRange){ /* Reposition the display rectangle */OffsetRect (&rLeadDest, 0, YScrollPosition - YScrollRange);/* Adjust the scroll position */YScrollPosition = YScrollRange;}}else{ /* There will also be a horizontal scroll bar *//* Calculate the scroll range, including the scrollbar */YScrollRange = DisplayHeight - ClientHeight + BottomBarThickness;}SetScrollRange(hWnd, SB_VERT, 0, YScrollRange, FALSE);SetScrollPos(hWnd, SB_VERT, YScrollPosition, TRUE);}/* Calculate the range and scroll position of the horizontal scroll bar */if (ClientWidth >= DisplayWidth){ /* We do not need a horizontal scroll bar *//* Use the full display width, and turn off the scroll bar */rLeadDest.right = DisplayWidth;rLeadDest.left = 0;SetScrollRange(hWnd, SB_HORZ, 0, 0, FALSE);}else{ /* We need a horizontal scrollbar *//* The range and position of the horizontal scrollbar depend onwhether there is also a vertical scrollbar */if (ClientHeight >= DisplayHeight){ /* There will not be a vertical scroll bar *//* Calculate the range without the vertical scrollbar */XScrollRange = DisplayWidth - ClientWidth;/* If the expected scroll position would leave blank space,adjust the scroll position and reposition the display rectangle */if (XScrollPosition > XScrollRange){ /* Reposition the display rectangle */OffsetRect (&rLeadDest, XScrollPosition - XScrollRange, 0);/* Adjust the scroll position */XScrollPosition = XScrollRange;}}else{ /* There will also be a vertical scroll bar *//* Calculate the scroll range, including the scrollbar */XScrollRange = DisplayWidth - ClientWidth + RightBarThickness;}SetScrollRange(hWnd, SB_HORZ, 0, XScrollRange, FALSE);SetScrollPos(hWnd, SB_HORZ, XScrollPosition, TRUE);}fSizeInUse = FALSE;return (0);}return DefWindowProc (hWnd, Message, wParam, lParam);}
Help Collections
Raster .NET | C API | C++ Class Library | HTML5 JavaScript
Document .NET | C API | C++ Class Library | HTML5 JavaScript
Medical .NET | C API | C++ Class Library | HTML5 JavaScript
Medical Web Viewer .NET
Multimedia
Direct Show .NET | C API | Filters
Media Foundation .NET | C API | Transforms
Supported Platforms
.NET, Java, Android, and iOS/macOS Assemblies
Imaging, Medical, and Document
C API/C++ Class Libraries
Imaging, Medical, and Document
HTML5 JavaScript Libraries
Imaging, Medical, and Document
