摘要:Hook DHTML Commands
浏览器在执行很多命令之前都会允许容器来替换默认的处理。在执行一些默认的命令之前,系统会查询用户对IDocHostUIHandler的实现对象的IOleCommandTarget接口,调用默认(NULL)或者CGID_DocHostCommandHandler命令组的命令。如果容器的对应命令处理返回S_OK。那么默认的处理就不会被调用。
下面列出一些可以在容器中自定义的操作:(这些常量的定义位于docobj.h中)
OLECMDID_PRINT,默认命令组
OLECMDID_SHOWSCRIPTERROR, CGID_DocHostCommandHandler命令组
OLECMDID_FOCUSVIEWCONTROLSQUERY, CGID_DocHostCommandHandler命令组
OLECMDID_SHOWPAGEACTIONMENU, CGID_DocHostCommandHandler命令组
MFC提供了一些比较容易扩展的类和宏,这样可以很容易地在扩展容器来实现新的接口。这里使用CCmdTarget类提供的GetInterfaceHook虚函数来进行扩展。
//This sample is based on MFC sample DHTMLExplore.
//a button is inserted into explore.htm:
//<BUTTON class=hotElement id=print accesskey="P"><U>P</U>rint</BUTTON>
//to invoke the print command
#include <afxole.h>
#include <mshtmcid.h>
/////////////////////////////////////////////////////////////////////////////
// CDHtmlExploreDlg dialog
class CDHtmlExploreDlg;
//customize the CBrowserControlSite class to implement IOleCommandTarget.
//the IDocHostUIHandler interface is implemented in CBrowserControlSite,
//an internal control site class declared within afxdhtml.h
class CDHtmlExploreControlSite: public CBrowserControlSite
, public IOleCommandTarget
CDHtmlExploreControlSite(
COleControlContainer* pCtrlCont,
CDHtmlExploreDlg *pHandler)
: CBrowserControlSite(pCtrlCont,pHandler){};
protected:
// Implementation
......[
阅读全文]