现在做了一个BHO,想要在里面加入打印控制,但是重载了IOleCommandTarget接口的querystatus和exec方法 都没有进去执行,请问这是为什么
class ATL_NO_VTABLE CEyeOnIE :
public IOleCommandTarget,
public CComObjectRootEx <CComSingleThreadModel>,
public CComCoClass <CEyeOnIE, &CLSID_EyeOnIE>,
public IObjectWithSiteImpl <CEyeOnIE>, public IDispatchImpl <IEyeOnIE, &IID_IEyeOnIE, &LIBID_BHOPLUGINLib>
{
public:
CEyeOnIE():m_bBlockNewWindow(TRUE),
m_dwBrowserCookie(0),
m_pWBDisp(NULL)
{
} DECLARE_REGISTRY_RESOURCEID(IDR_EYEONIE)
BEGIN_COM_MAP(CEyeOnIE)
COM_INTERFACE_ENTRY(IOleCommandTarget)
COM_INTERFACE_ENTRY(IEyeOnIE)
COM_INTERFACE_ENTRY(IDispatch)
COM_INTERFACE_ENTRY(IObjectWithSite)
END_COM_MAP() STDMETHOD(QueryStatus)(
/*[in]*/ const GUID *pguidCmdGroup,
/*[in]*/ ULONG cCmds,
/*[in,out][size_is(cCmds)]*/ OLECMD prgCmds[ ],
/*[in,out]*/ OLECMDTEXT *pCmdText)
{
return E_NOTIMPL; } STDMETHOD(Exec)(
/*[in]*/ const GUID *pguidCmdGroup,
/*[in]*/ DWORD nCmdID,
/*[in]*/ DWORD nCmdExecOpt,
/*[in]*/ VARIANTARG *pvaIn,
/*[in,out]*/ VARIANTARG *pvaOut)
{ if (nCmdID==OLECMDID_PRINT)
{
OutputDebugString("print hook");
//(*pvaOut).vt = VT_BOOL;
//(*pvaOut).boolVal = VARIANT_TRUE;
return S_OK;
} if (nCmdID==OLECMDID_PRINTPREVIEW)
{
return S_OK;
}
return m_spDefaultOleCommandTarget->Exec(pguidCmdGroup, nCmdID, nCmdExecOpt, pvaIn, pvaOut);
}
class ATL_NO_VTABLE CEyeOnIE :
public IOleCommandTarget,
public CComObjectRootEx <CComSingleThreadModel>,
public CComCoClass <CEyeOnIE, &CLSID_EyeOnIE>,
public IObjectWithSiteImpl <CEyeOnIE>, public IDispatchImpl <IEyeOnIE, &IID_IEyeOnIE, &LIBID_BHOPLUGINLib>
{
public:
CEyeOnIE():m_bBlockNewWindow(TRUE),
m_dwBrowserCookie(0),
m_pWBDisp(NULL)
{
} DECLARE_REGISTRY_RESOURCEID(IDR_EYEONIE)
BEGIN_COM_MAP(CEyeOnIE)
COM_INTERFACE_ENTRY(IOleCommandTarget)
COM_INTERFACE_ENTRY(IEyeOnIE)
COM_INTERFACE_ENTRY(IDispatch)
COM_INTERFACE_ENTRY(IObjectWithSite)
END_COM_MAP() STDMETHOD(QueryStatus)(
/*[in]*/ const GUID *pguidCmdGroup,
/*[in]*/ ULONG cCmds,
/*[in,out][size_is(cCmds)]*/ OLECMD prgCmds[ ],
/*[in,out]*/ OLECMDTEXT *pCmdText)
{
return E_NOTIMPL; } STDMETHOD(Exec)(
/*[in]*/ const GUID *pguidCmdGroup,
/*[in]*/ DWORD nCmdID,
/*[in]*/ DWORD nCmdExecOpt,
/*[in]*/ VARIANTARG *pvaIn,
/*[in,out]*/ VARIANTARG *pvaOut)
{ if (nCmdID==OLECMDID_PRINT)
{
OutputDebugString("print hook");
//(*pvaOut).vt = VT_BOOL;
//(*pvaOut).boolVal = VARIANT_TRUE;
return S_OK;
} if (nCmdID==OLECMDID_PRINTPREVIEW)
{
return S_OK;
}
return m_spDefaultOleCommandTarget->Exec(pguidCmdGroup, nCmdID, nCmdExecOpt, pvaIn, pvaOut);
}
解决方案 »
- 有关delete回收空间的简单问题
- listcontrol 的简单问题
- [求助]请问为什么我隐藏滚动条,在XPSP2下不起作用?
- 迫切想提高自己的能力,请大家给些建议!!!希望支持,顶者有分!!!!内详
- 谁有类似QQ这样的程序源码,可以给一份我参考一下吗?
- 我增加了一个类myTreeView,从CTreeView继承,但是报错:CTreeView没有base Class?
- 当我们双击csdn的搜索栏时,会显示以前的搜索内容。请问操作系统把这些字符串存在什么地方??
- 如何在Dialog中画一个动态的图像?
- :我能找到什么样的工作
- 为什么我的socket不执行OnConnect
- 打开新程序的时候如何关闭自己
- 程序运行后出现Query the registry to get manually configured process list.
但是IOLECOMMANDTARGET那2个函数就是不执行