Перо и маркер с помощью взаимодействия PowerPoint 2010 - PullRequest
7 голосов
/ 21 октября 2011

Я новичок в взаимодействии с PowerPoint и пытаюсь нарисовать красное перо и желтый текстовый маркер (не фигур !!!) в режиме презентации.

ОБНОВЛЕНИЕ:

Я могу нарисовать линию следующим образом:

settings = presentation.SlideShowSettings; 
window = settings.Run(); 
window.View.DrawLine(startX, startY, endX, endY); 

Но линия всегда будет черной и тонкой.Как выбрать для него красную ручку или желтый текстовый маркер?

Помимо метода DrawLine, я могу выбрать ручку для пользователя (курсор мыши становится ручкой вместо стрелки), установив:

window.View.PointerType = PpSlideShowPointerType.ppSlideShowPointerPen;
window.View.PointerColor.RGB = 255;

Но как мне установить для него маркер текста?желтый будет 65535, как мне получить стиль текстового маркера (большая ручка, прозрачность) вместо крошечной твердой ручки?

Ответы [ 2 ]

3 голосов
/ 05 декабря 2011
  1. Создание прозрачного и верхнего окна WPF (РЕДАКТИРОВАТЬ: не максимизировать окно)

    <Window ... Background="#00000000" Topmost="True" ShowInTaskbar="False" WindowStyle="None" AllowsTransparency="True" ResizeMode="NoResize">
    
  2. (NEW) Используйте GetWindowRect, чтобы получить расположение и размер окна слайд-шоу

    [DllImport("user32.dll", SetLastError = true)]
    [return: MarshalAs(UnmanagedType.Bool)]
    static extern bool GetWindowRect(IntPtr hWnd, ref RECT lpRect);
    [StructLayout(LayoutKind.Sequential)]
    private struct RECT
    {
        public int Left;
        public int Top;
        public int Right;
        public int Bottom;
    }
    
  3. Поместите прозрачное окно поверх окна слайд-шоу PowerPoint

    settings = presentation.SlideShowSettings;
    slideshowWindow = settings.Run();
    
    RECT rect = new RECT();
    GetWindowRect(new IntPtr(slideshowWindow.HWND), ref rect);        
    overlayWindow.Left = rect.Left; // EDIT: do not use slideshowWindow.Left, etc.
    overlayWindow.Top = rect.Top;
    overlayWindow.Width = rect.Width;
    overlayWindow.Height = rect.Height;
    
  4. Поместите Canvas в окно WPF и добавьте к нему объекты Polyline по мере необходимости. Текстовые маркеры могут быть такими:

    line = new Polyline
    {
        Opacity = 0.8,
        Stroke = new SolidColorBrush(Colors.Yellow),
        StrokeThickness = 20
    };
    this.canvas.Children.Add(line);
    

    Добавление точек в линию. Точки по мере необходимости. Звоните this.canvas.Children.Clear(), чтобы очистить все ваши рисунки.

Это обходной путь, но я бы сказал, что ваш лучший выстрел.

2 голосов
/ 02 декабря 2011

Мой пример приложения начинается с создания экземпляра класса PowerPoint.Application;

PowerPoint.Application PowerPointApplication = new PowerPoint.Application();

Затем я устанавливаю свойство Visible на msoTrue;

PowerPointApplication.Visible = Core.MsoTriState.msoTrue;

Затем создайте Presentation и Slide;

PowerPoint.Presentations PowerPointPresentationSet = PowerPointApplication.Presentations;

PowerPoint._Presentation PowerPointPresentation = PowerPointPresentationSet.Add();
PowerPoint.Slides PowerPointSlideSet = PowerPointPresentation.Slides;

PowerPoint._Slide PowerPointSlide = PowerPointSlideSet.Add(1, PowerPoint.PpSlideLayout.ppLayoutBlank);

В своем коде я создал объект Shape;

PowerPoint.Shape PowerPointShape = PowerPointSlide.Shapes.AddLine(100, 100, 500, 500);

Затем я отформатировал егокак это;

PowerPointShape.Line.Weight = 10;
PowerPointShape.Line.ForeColor.RGB = 65535;

PowerPointShape.Line.Transparency = 0.8f;

Дело в том, что Opacity увеличивается, когда свойство Transparency уменьшается.

Вы можете установить свойство Line.Weight в thinner или тикер строки, и вы можете установить значение свойства Foreground.RGB для изменения цвета линии.

PS: я добавил эти пространства имен кодовые файлы usings area;

using PowerPoint = Microsoft.Office.Interop.PowerPoint;
using Core = Microsoft.Office.Core;

Рабочее решение можно найти по этой ссылке;http://snipt.org/nsgk7

...