PowerPoint工具栏按钮插件如何在点击时获得所在PPT的文件名?按钮点击时如何向另一进程发送字符串数据?如何向每页的备注中写入字符串?

scq2099yt 2008-03-21 07:31:51
开发工具是:VC6.0
所用技术:不支持MFC的ATL
应用方向是:Office PowerPoint 2003插件

问题一:PowerPoint工具栏按钮插件如何在点击时获得所在PowerPoint的文件名及路径?
我用ATL开发了一个Office PowerPoint 2003的COM插件。插件是不支持MFC的DLL程序。注册该插件后会在PowerPoint上新增一个工具栏,在工具栏上会有两个按钮。当我打开PowerPoint后,点击该工具栏按钮时,如何获得该PowerPoint的文件名及路径?
例如:我新建了一个PowerPoint文档,存放在C盘根目录下,名称为:“大学语文.ppt”,完整路径为:“C:\大学语文.ppt”。当打开该文档并点击工具栏按钮后,就能在按钮单击事件中获得字符串“C:\大学语文.ppt”。

问题二:按钮点击时如何向另一进程发送字符串数据?
我用MFC编了一个对话框应用程序,应用程序没有标题栏,如何在点击PowerPoint工具栏按钮后,在按钮事件中启动该对话框应用程序,并将问题一中获得的PowerPoint文件名及路径字符串(“C:\大学语文.ppt)发送给该对话框应用程序?是否能用发送消息的方式实现?

问题三:如何向每个PowerPoint页面的备注中写入字符串?
我用MFC编了一个对话框应用程序,在该对话框应用程序中输入一些字符串信息,如何将该字符串信息写入相应PowerPoint页面的备注中。比如:将字符串“我是中国人”写入第一页的备注中。

谢谢!
如果分不够可以再加。
再次感谢!
...全文
361 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
lihaiair 2012-04-21
  • 打赏
  • 举报
回复
主要内容包括:启动、打开、关闭、播放、翻到首页、翻到末叶、翻到上页、翻到下页等。
本代码以PowerPoint 2003为例,其他OFFICE组件及版本方法与此类似。
下面是主要步骤和代码:
1、创建MFC对话框应用程序,在向导的第3步选择automation,其他保持默认即可。
2、在对话框上添加启动、打开、关闭、运行、播放、翻到首页、翻到末叶、翻到上页、翻到下页等按钮及函数。
3、在应用程序的InitInstance()中初始化OLE,代码如下:
// Initialize OLE libraries
if (!AfxOleInit())
{
AfxMessageBox("Failed to initialize OLE");
return FALSE;
}
4、运用类向导添加PowerPoint类型库,类型库默认在"C:/Program Files/Microsoft Office/Office11/"下,文件名为:msppt.olb。
5、在对话框应用程序的头文件中添加:
#include "msppt8.h"
6、在在对话框应用程序的头文件中添加如下变量:
_Application app;
Presentations Presentations;
_Presentation Presentation;
SlideShowView View;
SlideShowWindow SlideShowWindow;
SlideShowSettings slideshow;
Slides slides;
_Slide slide;
7、在启动按钮函数中添加如下代码:
void CXXXDlg::OnBtnStart()
{
// Start PowerPoint and get Application object...
if(!app.CreateDispatch("Powerpoint.Application"))
{
AfxMessageBox("Couldn't start PowerPoint.");
}
else // Make PowerPoint visible and display a message
{
app.SetVisible(TRUE);
TRACE("PowerPoint is Running!");
}
}
8、在打开按钮函数中添加如下代码:
void CXXXDlg::OnBtnOpen()
{
static char BASED_CODE szFilter[] = "PowerPoint Files (*.ppt)|*.ppt||";
CFileDialog FileDlg(TRUE,"PPT",NULL,OFN_FILEMUSTEXIST|OFN_NONETWORKBUTTON
|OFN_PATHMUSTEXIST,szFilter);
FileDlg.DoModal();

// To get the selected file's path and name
CString strFileName;
strFileName = FileDlg.GetPathName();

if(!strFileName.IsEmpty())
{
Presentations = app.GetPresentations();
Presentation = Presentations.Open(strFileName,0,0,1);
}
}
9、在关闭按钮函数中添加如下代码:
void CXXXDlg::OnBtnClose()
{
if (CanExit())
app.Quit();
}
10、在运行按钮函数中添加如下代码:
void CXXXDlg::OnBtnRun()
{
Presentations = app.GetActivePresentation();
slides = Presentation.GetSlides();
// Show the first slide of the presentation
slide = slides.Item(COleVariant((long)1));

//Run the show
slideshow = Presentation.GetSlideShowSettings();
slideshow.Run();
}
11、在翻到首页按钮函数中添加如下代码:

void CXXXDlg::OnBtnFirst()
{
Presentation = app.GetActivePresentation();
SlideShowWindow = Presentation.GetSlideShowWindow();
View = SlideShowWindow.GetView();
View.First();
}
12、在翻到末叶按钮函数中添加如下代码:
void CXXXDlg::OnBtnLast()
{
Presentation = app.GetActivePresentation();
SlideShowWindow = Presentation.GetSlideShowWindow();
View = SlideShowWindow.GetView();
View.Last();
}
13、在翻到前页按钮函数中添加如下代码:
void CXXXDlg::OnBtnPrevious()
{
Presentation = app.GetActivePresentation();
SlideShowWindow = Presentation.GetSlideShowWindow();
View = SlideShowWindow.GetView();
View.Previous();
}
14、在翻到下页按钮函数中添加如下代码:
void CXXXDlg::OnBtnNext()
{
Presentation = app.GetActivePresentation();
SlideShowWindow = Presentation.GetSlideShowWindow();
View = SlideShowWindow.GetView();
View.Next();
}
scq2099yt 2008-03-25
  • 打赏
  • 举报
回复
谢谢蒋大哥,问题全部解决了,而且长了不少知识。
不知道蒋大哥可否跟我交个朋友?希望等我升星后能加我为好友。
蒋晟 2008-03-21
  • 打赏
  • 举报
回复
1 访问application的活动文档的路径
2 你的两个进程内的代码需要有一个进程间通讯(IPC)协议,比如命名管道、注册的消息或者内存映射
3 同上,你的插件需要在接收到外部进程的消息之后修改备注。
关于Powerpoint的编程接口,可以参考Office的VBA帮助。

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧