这是来自 Windows 8 经典示例的稍微修改的 Direct Manipulation Sample 应用程序。我删除了除单个视口及其内容(方格纹理)之外的所有元素。当我设置 IDirectManipulationVewport::SetViewportRect() 偏移到原点(例如 SetViewportRect(100, 100, client_rect.right, client_rect.bottom) 我希望内容在 100, 100 处对齐。但是内容总是在窗口(父 IDirectCompositionVisual)原点。
我也尝试了 IDirectManipulationViewport::SetViewportTransform() 与翻译矩阵,但结果是一样的。
将视口定位在视觉而不是原点的正确方法是什么?可能吗?或者我应该用视口创建另一个子 IDirectCompositionVisual,用 SetOffsetX/Y 定位它并向它添加内容?
这是文档的链接
Rita Han 回答后的 UPD:如果您仅对示例进行以下修改:
//modify viewport rectangle in CAppWindow::_SizeDependentChanges()
_viewportOuterRect.left = 100;
_viewportOuterRect.top = 100;
//align content at the center in HRESULT CAppWindow::_InitializeManagerAndViewport()
primaryContentOuter->SetHorizontalAlignment(DIRECTMANIPULATION_HORIZONTALALIGNMENT_CENTER);
primaryContentOuter->SetVerticalAlignment(DIRECTMANIPULATION_VERTICALALIGNMENT_CENTER);
//change zoom boundaries to enable zoom out
hr = primaryContentOuter->SetZoomBoundaries(0.1f, 5.0f);
如果缩小,您将看到以下内容: 红色 - 实际不正确的视口矩形(_viewportOuterRect.left 和顶部坐标被忽略,但大小已更改)。
绿色 - 预期的视口矩形。
蓝色 - 预期的内容对齐位置。