I have a window with child windows inside in it. The child windows take up about 1000 pixels of vertical space. However, our users don’t always have 1000 pixels of vertical space available – they might have as little as 500 or 600 pixels.
I want to be able to display this window at a size of 500 pixels high, and have the user “scroll” up and down the window to see the full contents. The window should always be 500 pixels high, but the view within it should change.
Assume I can add a scroll bar somewhere so the user can choose which part of the window he wants to see. Windows will normally paint the window contents from height 0 to height 500; how do I tell it instead to “paint from height 250 to height 750”, for example?
I know that I can set the viewport with functions like SetViewportOrgEx etc, but those functions require a device context – when do I call them if I want them to be “permanent”? Do I call them when I get the WM_PAINT message from windows? Or at some other time? And which functions from that family do I want to use?
Edit to add: I don’t want to actually change the position of the child windows – they should stay at the same position, and the only thing that should change is the view into the window.
Thanks.
If (when you get messages about the scroll bars changing) you call ScrollWindowEx with the SW_SCROLLCHILDREN flag, the child windows should be told to scroll along with everything else. This ought to put them in the right position.