隔壁老王的博客

-=☆开发手记☆=-

用户操作
[即时聊天] [发私信] [加为好友]
老王ID:wallimn
35962次访问,排名3236好友22人,关注者24
写过一些软件,VC、Delphi、Java都会一些,Oracle数据库也懂一点。这几年一直在同这些东西打交道。
wallimn的文章
原创 53 篇
翻译 0 篇
转载 13 篇
评论 105 篇
wallimn的公告
   我是一名编程爱好者,在此记录一些我编程过程中遇到的问题及解决方法,希望对遇到类似问题的朋友有所帮助。博客中提到的软件,请到我的网络硬盘下载。
  欢迎有共同爱好的朋友联系交流
邮件:
wallimn@sohu.com
QQ:
54871876
MSN:
wallimn@hotmail.com
网络硬盘:
http://wallimn.ys168.com

最近评论
wallimn:可以加查寻条件呀,主SQL及SQL从句都加上条件就可以了。
你说的那个贴子我去回了。
wallimn:今天检查了一下以前发的文章,发现count.xml内容有个错误,就是末尾的<count>写错了,应该写为:</count>
现在已经改正过来了。
haodd123:麻烦看下我的提问,是关于您的这个方法的,谢谢:
http://topic.csdn.net/u/20081001/04/b881d1f8-a036-44ee-bc3c-01f5559b9b8c.html?seed=1352765950
haodd123:找到办法了:
SELECT TOP 1 *
FROM mkList
WHERE musicName =@strWhere AND musicId NOT IN (SELECT TOP 1 musicId FROM mkList ORDER BY musicId DESC)
ORDER BY musicId DESC;
haodd123:对了,还不能在分页时加上查寻条件
文章分类
收藏
    相册
    个人相册
    友情链拉
    我的网络硬盘
    存档
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    原创 谈如何捕获OFFICE软件的事件 收藏

    新一篇: OFFICE文档容器插件V1.3  | 旧一篇: WORD2003签名签章插件

    /***********本人原创,欢迎转载,转载请保留本人信息*************/
    作者:王力猛 (wallimn)
    电邮:wallimn@sohu.com
    博客:http://wallimn.bokee.com
       http://blog.csdn.net/wallimn
    时间:2006-11-15
    /***********本人原创,欢迎转载,转载请保留本人信息*************/
      今天很高兴,终于学会捕获Microsoft Office PowerPoint的事件。写出来给大家分享。我发现网上原创的文章少,转载的文章多,我来为原创做点贡献。
      本文以PPT为例,其原理应该适用于WORD及EXCEL,假定读者有些使用ATL开发OFFICE插件(或COM)的基础。所谓事件,在PPT中是指SlideShowBegin(播放开始)、SlideShowEnd(播放结束)等,所有事件的名字和含义可以PPT的VBA帮助章节找到。
      作者的测试环境为VC6.0,使用ATL框架。测试的基础软件框架使用的是徐景周(很感谢这位高人,代码及文章给了我很大的帮助)的《PowerPoint2K/XP插件开发》中的源码,相关源码及文章可以到www.vckbase.com上找到。插件开发的相关细节这里就略过了。
      其实技术就是一层纸,非常的简单,在此我也不打算详细的说,把几个要点说一下。其实是仔细分析了自定义按钮单击事件的代码后,经过一上午的测试实现了PPT播放事件的捕获。主要就是在几个地方加入些代码。
    1.使插件类继承public IDispEventSimpleImpl<11/*自定的不重复正数*/, CPowerPoint2000Addin, &__uuidof(MSPPT::EApplication)>
     定义一个转义:typedef IDispEventSimpleImpl</*nID =*/ 11,CPowerPoint2000Addin, &__uuidof(MSPPT::EApplication)> PPTEvents;
    2.声明一个结构,标识响应函数信息(第一个必须为CC_STDCALL,后面是返回值,参数个数及类型)
    _ATL_FUNC_INFO OnPPTEventInfo = {CC_STDCALL,VT_EMPTY,1,{VT_DISPATCH}};
    3.增加事件映射
     BEGIN_SINK_MAP(CPowerPoint2000Addin)
      //SINK_ENTRY_INFO(1,__uuidof(Office::_CommandBarButtonEvents),/*dispid*/ 0x01,OnClickButton1, &OnClickButtonInfo)
      SINK_ENTRY_INFO(11,__uuidof(MSPPT::EApplication),/*dispid*/ 2011,SlideShowBegin, &OnPPTEventInfo)//2011,DISPID,可以在MSDN上查到
     END_SINK_MAP()
    其它DISPID
    2001 WindowSelectionChange  
    2002 WindowBeforeRightClick  
    2003 WindowBeforeDoubleClick  
    2004 PresentationClose  
    2005 PresentationSave  
    2006 PresentationOpen  
    2007 NewPresentation  
    2008 PresentationNewSlide  
    2009 WindowActivate  
    2010 WindowDeactivate  
    2011 SlideShowBegin  
    2012 SlideShowNextBuild  
    2013 SlideShowNextSlide  
    2014 SlideShowEnd  
    2015 PresentationPrint  
    2016 SlideSelectionChanged x
    2017 ColorSchemeChanged x
    2018 PresentationBeforeSave x
    2019 SlideShowNextClick x

    4.声明事件
        void __stdcall SlideShowBegin (IDispatch * /*struct SlideShowWindow * */ Wn );
      实现事件
      void __stdcall CPowerPoint2000Addin::SlideShowBegin (IDispatch * /*struct SlideShowWindow * */ Wn )
    {
     MessageBox(NULL, "SlideShowBegin", "SlideShowBegin" , MB_OK);
    // return S_OK;
    }
    5.激活新增的事件连接点
      hr = PPTEvents::DispEventAdvise((IDispatch*)m_spApp);
      if(FAILED(hr)){
       //MessageBox(NULL, "FAILED", "FIELED", MB_OK);
      }

    这样就可以了,可以点击PPT播放按钮看一下效果,是不是弹出了自己的对话框。提示,不要忘了在插件卸载的时候断开新增的连接点事件。调试的时候不要忘记把OFFICE库改成自已机器上库的相应路径及版本。
    所有源码请到我的网络硬盘(http://wallimn.gbaopan.com)下载,更多信息请访问我的博客(http://wallimn.bokee.com)

     

    发表于 @ 2006年11月12日 14:32:00|评论(loading...)|编辑|收藏

    新一篇: OFFICE文档容器插件V1.3  | 旧一篇: WORD2003签名签章插件

    评论:没有评论。

    发表评论  


    登录
    Csdn Blog version 3.1a
    Copyright © wallimn