如何在win32中更改窗口的视口?

时间:2011-01-11 01:45:56

标签: winapi gdi viewport

我有一个里面有儿童窗户的窗户。子窗口占用大约1000像素的垂直空间。但是,我们的用户并不总是有1000像素的垂直空间可用 - 它们可能只有500或600像素。

我希望能够以500像素高的大小显示此窗口,并让用户在窗口中“向上滚动”以查看完整内容。窗口应始终为500像素高,但其中的视图应该更改。

假设我可以在某处添加滚动条,以便用户可以选择要查看的窗口部分。 Windows通常会将窗口内容从高度0绘制到高度500;例如,如何告诉它“从高度250到高度750”?

我知道我可以使用SetViewportOrgEx等函数设置视口,但这些函数需要设备上下文 - 如果我希望它们是“永久性的”,我什么时候调用它们?当我从Windows获取WM_PAINT消息时,是否会调用它们?还是在其他时间?我希望使用该家族的哪些功能?

编辑添加:我不想实际更改子窗口的位置 - 它们应该保持在同一位置,唯一应该改变的是窗口视图。

感谢。

1 个答案:

答案 0 :(得分:1)

如果(当您收到有关滚动条的消息更改时)您使用SW_SCROLLCHILDREN标志调用ScrollWindowEx,则应告知子窗口与其他所有内容一起滚动。这应该把它们放在正确的位置。