Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用PowerPoint 2010 interop的笔和标记_C#_.net_Add In_Powerpoint_Office Interop - Fatal编程技术网

C# 使用PowerPoint 2010 interop的笔和标记

C# 使用PowerPoint 2010 interop的笔和标记,c#,.net,add-in,powerpoint,office-interop,C#,.net,Add In,Powerpoint,Office Interop,我是PowerPoint interop的新手,我正在尝试在演示模式下绘制红色笔和黄色文本标记(不是形状!!!)线条 更新: 我可以画一条这样的线: settings = presentation.SlideShowSettings; window = settings.Run(); window.View.DrawLine(startX, startY, endX, endY); line = new Polyline { Opacity = 0.8, Stroke =

我是PowerPoint interop的新手,我正在尝试在演示模式下绘制红色笔黄色文本标记(不是形状!!!)线条

更新:

我可以画一条这样的线:

settings = presentation.SlideShowSettings; 
window = settings.Run(); 
window.View.DrawLine(startX, startY, endX, endY); 
line = new Polyline
{
    Opacity = 0.8,
    Stroke = new SolidColorBrush(Colors.Yellow),
    StrokeThickness = 20
};
this.canvas.Children.Add(line);
但这条线总是又黑又细。如何为其选择红色笔或黄色文本标记

除了DrawLine方法外,我还可以通过以下设置为用户选择笔(鼠标光标变成笔而不是箭头):

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

但如何将其设置为文本标记?黄色应该是65535,如何获得文本标记样式(更大的笔,透明)而不是微型实心笔?

我的示例应用程序首先创建一个
PowerPoint.application
类的实例

PowerPointApplication.PowerPointApplication=new PowerPoint.Application()

然后我将
Visible
属性设置为
msoTrue

PowerPointApplication.Visible = Core.MsoTriState.msoTrue;
然后创建一个
演示文稿
幻灯片

PowerPoint.Presentations PowerPointPresentationSet = PowerPointApplication.Presentations;

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

PowerPoint._Slide PowerPointSlide = PowerPointSlideSet.Add(1, PowerPoint.PpSlideLayout.ppLayoutBlank);
在我的代码中,我创建了一个
形状
对象

PowerPoint.Shape PowerPointShape = PowerPointSlide.Shapes.AddLine(100, 100, 500, 500);
然后,我把它格式化成这样

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

PowerPointShape.Line.Transparency = 0.8f;
关键是,
Transparency
属性减小时,
Opacity
增大

您可以将
Line.Weight
属性设置为线条更细或更粗,还可以设置
Foreground.RGB
属性的值以更改线条的颜色

PS:我使用区域添加了这些名称空间代码文件

你可以从这个链接找到有效的解决方案

  • 创建一个透明且最顶层的WPF窗口(编辑:不最大化窗口)

  • 将透明窗口放置在PowerPoint幻灯片窗口上

    [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;
    }
    
    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;
    
  • 将画布放入WPF窗口,并根据需要向其添加多段线对象。文本标记行可以如下所示:

    settings = presentation.SlideShowSettings; 
    window = settings.Run(); 
    window.View.DrawLine(startX, startY, endX, endY); 
    
    line = new Polyline
    {
        Opacity = 0.8,
        Stroke = new SolidColorBrush(Colors.Yellow),
        StrokeThickness = 20
    };
    this.canvas.Children.Add(line);
    
    根据需要向直线添加点。点。调用
    this.canvas.Children.Clear()
    清除所有图形


  • 这是一个解决办法,但我想说的是你的最佳选择。

    如果只有一个幻灯片窗口,那不是
    幻灯片窗口[0]
    ?我尝试了[0],但结果出现了一个异常,告诉我应该在1和1之间选择一个索引。。。所以很明显这不是零基础…Ppl,赏金马上就要结束了,真的没有办法吗?是的,我也这么做是为了快速解决问题,但我有3个问题:1。在尺寸合适的演示文稿中,绘制形状而不是标记非常缓慢(您可以看到创建的形状、调整的重量、颜色设置等)。在这之后,我在我的演示中有了真实的形状,我更喜欢标记和问题,如果你想保留或松开注释。三,。如果我在两个主题不同的演示文稿中使用此选项,形状将看起来不同(例如圆笔或矩形笔)…我编辑此问题是为了强调我在寻找标记,而不是形状。但是谢谢你的回答。我试过了,但是叠加窗口总是出现在主屏幕上。。。我遗漏了什么?抱歉,最大化窗口似乎有问题,幻灯片窗口的位置似乎错误。我编辑了我的答案,这样它可以在任何屏幕上工作