PrintWindow WPF / DirectX - PullRequest
       6

PrintWindow WPF / DirectX

4 голосов
/ 05 января 2009

Кто-нибудь знает способ надежно сделать снимок окна WPF? API PrintWindow хорошо работает для «стандартных» окон win32, но поскольку WPF использует DirectX, PrintWindow не может захватить изображение. Я думаю, что нужно было бы получить фронтальный буфер для объекта DirectX, связанного с окном, но я не уверен, как это сделать.

Спасибо!

Ответы [ 3 ]

4 голосов
/ 05 января 2009

Я не уверен, что это то, что вы имеете в виду, и я не уверен, что мне разрешено делать ссылки на мой блог или нет, но это какое-то использование? Он в основном использует RenderTargetBitmap для создания JPG. Вы можете использовать его для «скриншота» всего окна, а затем распечатать его.

Если это противоречит правилам, кто-то может удалить:)

1 голос
/ 19 августа 2010

Этот метод должен помочь вам распечатать все окно WPF / XAML

private void PrintWindow(PrintDialog pdPrint, 
                         System.Windows.Window wWin, 
                         string sTitle, 
                         System.Windows.Thickness? thMargin)
    {
        Grid drawing_area = new Grid();
        drawing_area.Width = pdPrint.PrintableAreaWidth;
        drawing_area.Height = pdPrint.PrintableAreaHeight;


        Viewbox view_box = new Viewbox();
        drawing_area.Children.Add(view_box);
        view_box.HorizontalAlignment = System.Windows.HorizontalAlignment.Center;
        view_box.VerticalAlignment = System.Windows.VerticalAlignment.Center;

        if (thMargin == null)
        {
            view_box.Stretch = System.Windows.Media.Stretch.None;
        }
        else
        {

            view_box.Margin = thMargin.Value;
            view_box.Stretch = System.Windows.Media.Stretch.Uniform;
        }


        VisualBrush vis_br = new VisualBrush(wWin);


        System.Windows.Shapes.Rectangle win_rect = new System.Windows.Shapes.Rectangle();
        view_box.Child = win_rect;
        win_rect.Width = wWin.Width;
        win_rect.Height = wWin.Height;
        win_rect.Fill = vis_br;
        win_rect.Stroke = System.Windows.Media.Brushes.Black;
        win_rect.BitmapEffect = new System.Windows.Media.Effects.DropShadowBitmapEffect();

        // Arrange to produce output.
        Rect rect = new Rect(0, 0, pdPrint.PrintableAreaWidth, pdPrint.PrintableAreaHeight);
        drawing_area.Arrange(rect);

        // Print it.
        pdPrint.PrintVisual(drawing_area, sTitle);

    }

С уважением, Шон Кэмпбелл

0 голосов
/ 10 января 2009

Вы можете использовать метод PrintDialog.PrintVisual ().

MSDN Link: http://msdn.microsoft.com/en-us/library/system.windows.controls.printdialog.printvisual.aspx

Образец: http://www.thejoyofcode.com/Reason_9._Printing.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...