C# 使用PowerPoint 2010 interop的笔和标记
我是PowerPoint 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 =
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。在尺寸合适的演示文稿中,绘制形状而不是标记非常缓慢(您可以看到创建的形状、调整的重量、颜色设置等)。在这之后,我在我的演示中有了真实的形状,我更喜欢标记和问题,如果你想保留或松开注释。三,。如果我在两个主题不同的演示文稿中使用此选项,形状将看起来不同(例如圆笔或矩形笔)…我编辑此问题是为了强调我在寻找标记,而不是形状。但是谢谢你的回答。我试过了,但是叠加窗口总是出现在主屏幕上。。。我遗漏了什么?抱歉,最大化窗口似乎有问题,幻灯片窗口的位置似乎错误。我编辑了我的答案,这样它可以在任何屏幕上工作