【问题标题】:How do I change the viewport of a window in win32?win32中如何更改窗口的视口?
【发布时间】:2011-01-11 01:45:55
【问题描述】:

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

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

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

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

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

谢谢。

【问题讨论】:

    标签: winapi gdi viewport


    【解决方案1】:

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

    【讨论】:

    • 我不想真正改变子窗口的位置——它们应该保持在同一个位置,唯一应该改变的是窗口的视图。
    • 看来这毕竟是我们必须要做的。谢谢!
    • 是的...据我所知,更改视口通常不会更改子窗口的绘制位置——至少,如果您在窗口过程中更改它不会更改,即你通常有一个 DC 可以玩的地方。视口决定了绘制的东西的位置,但子窗口似乎独立于此。
    猜你喜欢
    • 1970-01-01
    • 2011-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多