Вот немного измененное приложение «Образец прямой манипуляции» из классических образцов Windows 8.Я удалил все элементы, кроме одного окна просмотра и его содержимого (клетчатая текстура).Когда я устанавливаю IDirectManipulationVewport :: SetViewportRect () со смещением относительно источника (например, SetViewportRect (100, 100, client_rect.right, client_rect.bottom), я ожидаю, что содержимое будет выровнено в 100, 100. Однако содержимое всегда выравнивается поокно (родительский IDirectCompositionVisual) origin.
Я также пробовал IDirectManipulationViewport :: SetViewportTransform () с матрицей перевода, но результат тот же.
Как правильно расположить область просмотра в визуале, а не в источнике? Возможно ли это? Или я должен создать еще один дочерний IDirectCompositionVisual с областью просмотра, расположить его с помощью SetOffsetX / Y и добавить к нему содержимое?
Вот ссылка на документацию
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и верхние координаты игнорируются, однако размер изменяется).
зеленый - ожидаемый прямоугольник области просмотра.
синий - ожидаемая позиция выравнивания содержимого.