在 ocx 内部如何获取所在页面的 URL
来源:互联网 发布:乐视网络电视绿色版 编辑:程序博客网 时间:2024/06/18 12:51
.h头文件
//$---- Active Form HDR ---- (stActiveFormHdr)#ifndef LesWebImplH#define LesWebImplH//---------------------------------------------------------------------------#include <classes.hpp>#include <controls.hpp>#include <stdCtrls.hpp>#include <forms.hpp>#include "LesWebCtrl_TLB.h"#include <comdef.h>#include <mshtml.h>#include <exdisp.h>#include <shlguid.h>#include <activscp.h>//---------------------------------------------------------------------------class TLesWebX : public TActiveForm{__published: // IDE-managed Components...private: // User declarations...protected:...public: // User declarations...};//---------------------------------------------------------------------------//extern PACKAGE TLesWebX *LesWebX;//---------------------------------------------------------------------------//---------------------------------------------------------------------------class ATL_NO_VTABLE TLesWebXImpl: VCLCONTROL_IMPL(TLesWebXImpl, LesWebX, TLesWebX, ILesWebX, DIID_ILesWebXEvents) ,public IObjectWithSiteImpl<TLesWebXImpl> ,public IPersistPropertyBagImpl<TLesWebXImpl> ,public IObjectSafetyImpl<TLesWebXImpl,INTERFACESAFE_FOR_UNTRUSTED_CALLER|INTERFACESAFE_FOR_UNTRUSTED_DATA>{ void __fastcall CreateEvent(TObject *Sender); void __fastcall DestroyEvent(TObject *Sender);public: IHTMLDocument2* __fastcall GetHTMLDocument2(void); IHTMLWindow2* __fastcall GetHTMLWindow2(void); HWND __fastcall GetIEWinHandle(void); AnsiString __fastcall GetPageURL(void); ... void InitializeControl() { m_VclCtl->WebX=this; m_VclCtl->OnCreate = CreateEvent; m_VclCtl->OnDestroy = DestroyEvent; }// The COM MAP entries declares the interfaces your object exposes (through// QueryInterface). CComRootObjectEx::InternalQueryInterface only returns// pointers for interfaces in the COM map. VCL controls exposed as OCXes// have a minimum set of interfaces defined by the// VCL_CONTROL_COM_INTERFACE_ENTRIES macro. Add other interfaces supported// by your object with additional COM_INTERFACE_ENTRY[_xxx] macros.//BEGIN_COM_MAP(TLesWebXImpl) VCL_CONTROL_COM_INTERFACE_ENTRIES(ILesWebX) COM_INTERFACE_ENTRY_IMPL(IPersistPropertyBag) COM_INTERFACE_ENTRY(IObjectSafety) COM_INTERFACE_ENTRY(IObjectWithSite)END_COM_MAP()// The PROPERTY map stores property descriptions, property DISPIDs,// property page CLSIDs and IDispatch IIDs. You may use use// IPerPropertyBrowsingImpl, IPersistPropertyBagImpl, IPersistStreamInitImpl,// and ISpecifyPropertyPageImpl to utilize the information in you property// map.//// NOTE: The BCB Wizard does *NOT* maintain your PROPERTY_MAP table. You must// add or remove entries manually.//BEGIN_PROPERTY_MAP(TLesWebXImpl) // PROP_PAGE(CLSID_LesWebXPage)END_PROPERTY_MAP()/* DECLARE_VCL_CONTROL_PERSISTENCE(CppClass, VclClass) is needed for VCL * controls to persist via the VCL streaming mechanism and not the ATL mechanism. * The macro adds static IPersistStreamInit_Load and IPersistStreamInit_Save * methods to your implementation class, overriding the methods in IPersistStreamImpl. * This macro must be manually undefined or removed if you port to C++Builder 4.0. */DECLARE_VCL_CONTROL_PERSISTENCE(TLesWebXImpl, TLesWebX);// The DECLARE_ACTIVEXCONTROL_REGISTRY macro declares a static 'UpdateRegistry'// routine which registers the basic information about your control. The// parameters expected by the macro are the ProgId & the ToolboxBitmap ID of// your control.//DECLARE_ACTIVEXCONTROL_REGISTRY("LesWebCtrl.LesWebX", 1);protected: STDMETHOD(get_Visible(VARIANT_BOOL* Value)); STDMETHOD(set_Visible(VARIANT_BOOL Value)); ... ... ...};//---------------------------------------------------------------------------#endifCPP文件
// TYourOCXImpl 是你的 ATL 类,我这里实际是个 TActiveForm// 获取 IHTMLDocument2 指针IHTMLDocument2* __fastcall TLesWebXImpl::GetHTMLDocument2(void){ IHTMLDocument2* iDoc=NULL; try { if(m_spClientSite!=NULL) { CComPtr<IOleContainer> iOct(NULL); OleCheck(m_spClientSite->GetContainer(&iOct)); OleCheck(iOct->QueryInterface(IID_IHTMLDocument2, (void**)&iDoc)); } } catch(...) { iDoc=NULL; } if(iDoc!=NULL) return iDoc; try { if(m_spUnkSite!=NULL) { CComQIPtr<IServiceProvider,&IID_IServiceProvider> iSpv(m_spUnkSite); if(iSpv!=NULL) { CComPtr<IHTMLWindow2> iHmw(NULL); OleCheck(iSpv->QueryService(SID_SHTMLWindow, IID_IHTMLWindow2, (void**)(&iHmw))); if(iHmw!=NULL) OleCheck(iHmw->get_document(&iDoc)); } } } catch(...) { iDoc=NULL; } return iDoc;}// 获取 当前页面 的URL地址AnsiString __fastcall TYourOCXImpl::GetPageURL(void){ AnsiString s(""); CComPtr<IHTMLDocument2> iDoc(GetHTMLDocument2()); if(iDoc==NULL) return s; try { CComBSTR url(""); OleCheck(iDoc->get_URL(&url)); s=AnsiString(url.Copy()); } catch(...) { s=""; } //MessageBox(GetActiveWindow(),s.c_str(),"ref",MB_OK); return s;}
0 0
- 在 ocx 内部如何获取所在页面的 URL
- 在 ocx 内部如何获取所在页面的 URL
- 关于如何在静态页面获取url参数
- 如何在JSP页面上直接获取url的参数呢(不通过controller设置)?
- openlayers2 开发如何判断一个marker所在的点是否在一个多边形内部
- Javascript获取元素所在的页面位置
- 获取当前view所在页面的viewController
- 获取当前页面所在的controller
- FLEX中如何获取当前页面的URL的问题
- asp.net如何获取当前页面的URL
- 如何获取JAVA代码所在的行
- BCB如何获取.exe所在的路径?
- php如何获取服务器所在的时区
- 如何根据View获取所在的Controller
- jquery在子页面中获取父页面所在的frameset中的其它的frame中的元素
- 获取当前页面的Url
- 获取上一个页面的url
- OpenErp中如何实现在A类所在页面查询B类的记录
- HTMLParser
- JAVA那点事
- PHP入门(4)-Date()函数详细参数
- Java使用简单工厂模式对面向接口编程模式的深度解耦实现
- Imagview的scaletype属性
- 在 ocx 内部如何获取所在页面的 URL
- CMFCPropertySheet和CMFCPropertyPage增强用法
- 文章标题
- Java TreeSet重写Comparable方法
- C语言基础(一)
- Matlab读取txt文本并且绘制曲线
- iis 添加自定义woff文件类型字体 和 flv等常见类型
- Druid监控数据库
- 文章标题