【问题标题】:logical units to device units逻辑单元到设备单元
【发布时间】:2012-03-22 11:30:54
【问题描述】:

我一直在努力解决具有非零窗口原点的窗口的剪切问题,因为我没有意识到 SelectClipRgn 所需的设备单位。

所以鉴于我已经确定了视口原点和窗口原点如下......

POINT VP_Org, WN_Org;
GetViewportOrgEx (dc, VP_Org);
GerWindowOrgEx (dc, WM_Org);

我在逻辑坐标中有一个剪切区域 R,如何将 R 转换为设备单位以用于定义剪切区域?

换句话说,我如何转换 R 以便以下工作。

RECT R;
ClipRgn = CreateRectRgn (R.left, R.top, R.right, R.bottom)
SelectClipRgn (dc, ClipRgn)

我知道它看起来像

R.top = R.top - WN_Org.y +- VP_Org.y;

来自实验,但不知道要为视口使用什么标志。

【问题讨论】:

    标签: windows api gdi


    【解决方案1】:

    你可以使用LPtoDP函数:

    LPtoDP 函数将逻辑坐标转换为设备 坐标。转换取决于设备的映射模式 上下文,窗口的原点和范围的设置以及 视口和世界变换。

    【讨论】:

    • 好的,这很酷。仍然想知道视口调整的迹象。
    • 可以将一个 RECT 视为两个 POINT 吗?
    • @MikeD:是的,RECT 布局是 x1、y1、x2、y2。在MapWindowPoints 中也是如此。不确定这个标志,也许这有帮助:bobpowell.net/mappingmodes.htm
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-14
    • 2010-09-30
    • 2012-02-05
    相关资源
    最近更新 更多