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

Winapi 如何在win32中更改窗口的视口?,winapi,gdi,viewport,Winapi,Gdi,Viewport,我有一个里面有儿童窗的窗户。子窗口占据大约1000像素的垂直空间。然而,我们的用户并不总是有1000像素的垂直空间可用-他们可能只有500或600像素 我希望能够以500像素高的大小显示此窗口,并让用户上下“滚动”窗口以查看完整内容。窗口应始终为500像素高,但其中的视图应更改 假设我可以在某个地方添加一个滚动条,这样用户就可以选择要查看的窗口部分。Windows通常会在高度0到高度500之间绘制窗口内容;例如,我如何告诉它“从高度250到高度750”呢 我知道我可以使用SetViewportO

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

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

假设我可以在某个地方添加一个滚动条,这样用户就可以选择要查看的窗口部分。Windows通常会在高度0到高度500之间绘制窗口内容;例如,我如何告诉它“从高度250到高度750”呢

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


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


谢谢。

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

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

我不想实际更改子窗口的位置-它们应该保持在相同的位置,唯一应该更改的是窗口中的视图。看起来这毕竟是我们必须要做的。谢谢是的……据我所知,改变视口通常不会改变子窗口的绘制位置——至少,如果你在窗口过程中改变它,它不会改变,你通常会在那里玩DC。视口决定了绘制对象的位置,但子窗口似乎独立于此。我不想实际更改子窗口的位置-它们应该保持在相同的位置,唯一应该更改的是窗口中的视图。看起来这毕竟是我们必须要做的。谢谢是的……据我所知,改变视口通常不会改变子窗口的绘制位置——至少,如果你在窗口过程中改变它,它不会改变,你通常会在那里玩DC。视口确定了绘制对象的位置,但子窗口似乎独立于此。