原贴地址如下:
http://topic.csdn.net/t/20031201/09/2512510.html#vc将word,excel内嵌到我的程序中,可是加载word,excel文档的时候总会跳出“服务器正在运行中”要选择“切换到...”或"重试"的对话框,请问有人知道怎么屏蔽这个么。 ZHENG017 回答说:
AfxOleGetMessageFilter()->EnableBusyDialog(FALSE);//!!!!   
  AfxOleGetMessageFilter()->SetBusyReply(SERVERCALL_RETRYLATER);   
  AfxOleGetMessageFilter()->EnableNotRespondingDialog(TRUE);   
          AfxOleGetMessageFilter()->SetMessagePendingDelay   (-1);   
  AfxEnableControlContainer();请问这个COM消息过滤器,在代码的那里添加比较合适?是否需要实现 IMessageFilter接口

解决方案 »

  1.   

    请问这个COM消息过滤器,在什么地方添加比较合适?是否需要实现 IMessageFilter接口
      

  2.   

    http://support.microsoft.com/kb/248019/zh-cn使用 AfxOleGetMessageFilter()->SetMessagePendingDelay(nTimeout);

    将传出 COM 调用上设置等待时间。 如果 COM 调用时间长于 nTimeout 毫秒, 然后 MFC 客户应用程序显示 OLE 服务器忙 对话框。 使用,AfxOleGetMessageFilter()->EnableNotRespondingDialog(FALSE);

    要禁用 未响应 对话框, 显示如果键盘或鼠标消息是挂起期间 OLE 调用和调用已超。 使用 AfxOleGetMessageFilter()->EnableBusyDialog(FALSE);

    要禁用忙 @ 对话框中显示 COM 调用后超时。 
      

  3.   

    确保, MFC 客户端应用程序调用 AfxOleInit() 以初始化 COM。 这是重要, 因为 AfxOleInit() 还初始化并在 CWinApp 注册 COleMessageFilter 数据成员。 或者, 您可创建自己 COleMessageFilter 对象并注册, 在启动过程。 这句话如何理解, 是在App::InitInstance()函数中实现上面的代码吗?
      

  4.   

    怎么都是自问自答的。
    MFC程序无需你实现消息过滤器,因为它默认实现了一个。消息过滤器每线程只能有一个。按照别人回答的方式是可以的,相应的标志设好就不会出现提示对话框,系统自动根据这些标志来做默认处理。这些代码可以在任意地方调用,而且能调用多次,你可以在执行COM方法调用之前调用一次。