これは、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 と top の座標は無視されますが、サイズは変更されます)。
緑 - 予想されるビューポートの四角形。
青 - 予想されるコンテンツの配置位置。