cWebBrowser.cls
上传用户:davilee3
上传日期:2015-04-22
资源大小:986k
文件大小:30k
源码类别:

浏览器

开发平台:

Visual Basic

  1. VERSION 1.0 CLASS
  2. BEGIN
  3.   MultiUse = -1  'True
  4.   Persistable = 0  'NotPersistable
  5.   DataBindingBehavior = 0  'vbNone
  6.   DataSourceBehavior  = 0  'vbNone
  7.   MTSTransactionMode  = 0  'NotAnMTSObject
  8. END
  9. Attribute VB_Name = "cWebBrowser"
  10. Attribute VB_GlobalNameSpace = False
  11. Attribute VB_Creatable = False
  12. Attribute VB_PredeclaredId = False
  13. Attribute VB_Exposed = False
  14. '---------------------------------------------------------------------------------------
  15. ' Module    : cWebBrowser
  16. ' DateTime  : 2005-8-11 12:38
  17. ' Author    : Lingll
  18. ' Purpose   :
  19. ' 2005-8-11 :   Implemented IDownloadManager
  20. '               add DownloadBegin event
  21. ' 200x-x-xx :   Implemented IOleCommandTarget
  22. '---------------------------------------------------------------------------------------
  23. '*********************************************************************************************
  24. '
  25. ' Customizing the WebBrowser control
  26. '
  27. ' Custom WebBrowser control
  28. '
  29. '*********************************************************************************************
  30. '
  31. ' Author: Eduardo A. Morcillo
  32. ' E-Mail: e_morcillo@yahoo.com
  33. ' Web Page: http://www.domaindlx.com/e_morcillo
  34. '
  35. ' Distribution: You can freely use this code in your own applications but you
  36. '               can't publish this code in a web site, online service, or any
  37. '               other media, without my express permission.
  38. '
  39. ' Usage: at your own risk.
  40. '
  41. ' Tested with:
  42. '              Windows Me
  43. '              VB6 + SP5
  44. '              IE 6.0
  45. '
  46. ' History:
  47. '           09/26/2001 - Fixed: Mouse click doesn't set focus
  48. '           09/13/2001 - Added: BrowseMode property.
  49. '                      - Added: The control now implements IDocHostShowUI
  50. '                      - Fixed: Can't write on form fields
  51. '           05/04/2001 - Added the SecutiryZone property.
  52. '                      - Fixed: Properties are not saved.
  53. '           05/03/2001 - The class was converted to control.
  54. '                      - Implemented IServiceProvider to allow more
  55. '                        customizations.
  56. '                      - Implemented IInternetSecurityManager to
  57. '                        control security.
  58. '           04/27/2001 - Added the UserAgent and DownloadCtrl properties
  59. '           06/06/2000 - ExecCommand event was added.
  60. '           03/25/2000 - This code was released.
  61. '
  62. '*********************************************************************************************
  63. Option Explicit
  64. ' Implement IDocHostUIHandler to receive
  65. ' notifications from WebBrowser control
  66. Implements olelib.IDocHostUIHandler
  67. Implements olelib.IDocHostShowUI
  68. ' Implement IDropTarget to get OLE
  69. ' drag & drop events
  70. Implements olelib.IDropTarget
  71. ' Implement IServiceProvider
  72. Implements olelib2.IServiceProvider
  73. ' Implement IInternetSecurityManager to
  74. ' use security zones with this control
  75. Implements olelib.IInternetSecurityManager
  76. ' Implement site interfaces to host the WB control
  77. Implements olelib.IOleClientSite
  78. Implements olelib2.IOleInPlaceSite
  79. '主要目的是不显示脚本错误对话框
  80. Implements olelib2.IOleCommandTarget
  81. '处理下载事件
  82. Implements olelib.IDownloadManager
  83. ' ===== Private members =====
  84. Private WithEvents m_oWebBrowser As SHDocVw.WebBrowser               ' WebBrowser control
  85. Attribute m_oWebBrowser.VB_VarHelpID = -1
  86. Private WithEvents m_oDoc As HTMLDocument
  87. Attribute m_oDoc.VB_VarHelpID = -1
  88. Private m_oDataObject As DataObjectWB                     ' Custom DataObject
  89. Private m_oZM As olelib.IInternetZoneManager              ' ZoneManager object
  90. Private m_sUserAgent As String                            ' UserAgent
  91. Private m_lDownloadCtrl As DownloadCtrlFlags              ' Download control flags
  92. Private m_bBrowseMode As Boolean                          ' BrowseMode
  93. 'Private m_bGotFocus As Boolean
  94. ' ===== Public members =====
  95. Public HostInfo As HostFlags             ' Host flags
  96. Public SecurityZone As SecurityZones     ' Security Zone used by this control
  97. Public MessageCallback As WBMessages
  98. ' ===== Public enums =====
  99. Enum SecurityZones
  100.    LocalMachine = URLZONE.URLZONE_LOCAL_MACHINE
  101.    Intranet = URLZONE.URLZONE_INTRANET
  102.    Internet = URLZONE.URLZONE_INTERNET
  103.    Trusted = URLZONE.URLZONE_TRUSTED
  104.    Untrusted = URLZONE.URLZONE_UNTRUSTED
  105. End Enum
  106. Public Enum HostFlags
  107.    ' MSHTML will not allow selection
  108.    ' of the text in the form.
  109.    hfDialog = DOCHOSTUIFLAG_DIALOG
  110.    ' MSHTML will not add the Help menu
  111.    ' item to the container's menu.
  112.    hfDisableHelpMenu = DOCHOSTUIFLAG_DISABLE_HELP_MENU
  113.    ' MSHTML does not use 3-D borders.
  114.    hfNo3DBorder = DOCHOSTUIFLAG_NO3DBORDER
  115.    ' MSHTML does not have scroll bars.
  116.    hfNoScroll = DOCHOSTUIFLAG_SCROLL_NO
  117.    ' MSHTML will not execute any
  118.    ' script when loading pages.
  119.    hfDisableScripInactive = DOCHOSTUIFLAG_DISABLE_SCRIPT_INACTIVE
  120.    ' MSHTML will open a site in
  121.    ' a new window when a link is
  122.    ' clicked rather than browse to
  123.    ' the new site using the same
  124.    ' browser window.
  125.    hfBrowseNew = DOCHOSTUIFLAG_OPENNEWUI
  126.    ' Not implemented.
  127.    hfDisableOffScreen = DOCHOSTUIFLAG_DISABLE_OFFSCREEN
  128.    ' MSHTML will use flat scroll bars
  129.    ' for any UI it displays.
  130.    hfFlatScroll = DOCHOSTUIFLAG_FLAT_SCROLLBAR
  131.    ' MSHTML will insert the <DIV> tag
  132.    ' if a return is entered in edit mode.
  133.    ' Without this flag, MSHTML will use
  134.    ' the <P> tag.
  135.    hfDivBlock = DOCHOSTUIFLAG_DIV_BLOCKDEFAULT
  136.    ' MSHTML will only become UI active
  137.    ' if the mouse is clicked in the
  138.    ' client area of the window. It will
  139.    ' not become UI active if the mouse
  140.    ' is clicked on a nonclient area, such
  141.    ' as a scroll bar.
  142.    hfActiveClientHit = DOCHOSTUIFLAG_ACTIVATE_CLIENTHIT_ONLY
  143.    ' MSHTML will consult the host
  144.    ' before retrieving a behavior
  145.    ' from the URL specified on the page.
  146.    hfOverrideBehaviorFactory = DOCHOSTUIFLAG_OVERRIDEBEHAVIORFACTORY
  147.    ' This flag was added to Microsoft(r)
  148.    ' Internet Explorer 5 to provide font
  149.    ' selection compatibility for Microsoft(r)
  150.    ' Outlook(r) Express. If the flag is enabled,
  151.    ' the displayed characters are inspected
  152.    ' to determine whether the current font
  153.    ' supports the code page. If disabled, the
  154.    ' current font is used, even if it does
  155.    ' not contain a glyph for the character.
  156.    ' Note This flag assumes that the user is
  157.    ' using Internet Explorer 5 and Outlook
  158.    ' Express 4.0.
  159.    hfCodePageLinkedFonts = DOCHOSTUIFLAG_CODEPAGELINKEDFONTS
  160.    ' This flag was added to Internet Explorer
  161.    ' 5 to control how nonnative URLs are
  162.    ' transmitted over the Internet. Nonnative
  163.    ' refers to characters outside the
  164.    ' multibyte encoding of the URL. If this
  165.    ' flag is set, the URL is not submitted
  166.    ' to the server in UTF-8 encoding.
  167.    hfDisableUTF8 = DOCHOSTUIFLAG_URL_ENCODING_DISABLE_UTF8
  168.    ' This flag was added to Internet Explorer
  169.    ' 5 to control how nonnative URLs are
  170.    ' transmitted over the Internet. Nonnative
  171.    ' refers to characters outside the
  172.    ' multibyte encoding of the URL. If this
  173.    ' flag is set, the URL is submitted
  174.    ' to the server in UTF-8 encoding.
  175.    hfEnableUTF8 = DOCHOSTUIFLAG_URL_ENCODING_ENABLE_UTF8
  176.    ' This flag enables the AutoComplete
  177.    ' feature for forms in the hosted
  178.    ' browser. The Intelliforms feature will
  179.    ' only be turned on if the user has
  180.    ' previously enabled it. If the user has
  181.    ' turned the AutoComplete feature off
  182.    ' for forms, it will be off whether
  183.    ' this flag is specified or not.
  184.    hfEnableFormAutocomplete = DOCHOSTUIFLAG_ENABLE_FORMS_AUTOCOMPLETE
  185.    ' This flag enables the host to specify
  186.    ' that navigation should happen in place.
  187.    ' This means that applications hosting
  188.    ' MSHTML directly can specify that
  189.    ' navigation happen in the application's
  190.    ' window. For instance, if this flag is
  191.    ' set, you can click a link in HTML mail
  192.    ' and navigate in the mail instead of
  193.    ' opening a new Internet Explorer window.
  194.    hfInPlaceNavigation = DOCHOSTUIFLAG_ENABLE_INPLACE_NAVIGATION
  195.    ' During initialization, the host can set
  196.    ' this flag to enable input method editor
  197.    ' (IME) reconversion, allowing computer
  198.    ' users to employ IME reconversion while
  199.    ' browsing Web pages. An input method
  200.    ' editor is a program that allows users to
  201.    ' enter complex characters and symbols,
  202.    ' such as Japanese Kanji characters, using
  203.    ' a standard keyboard. For more information,
  204.    ' see the International Features reference
  205.    ' in the Base Services section of the
  206.    ' Platform SDK.
  207.    hfEnableIME = DOCHOSTUIFLAG_IME_ENABLE_RECONVERSION
  208.    
  209.    hfDefault = hfEnableFormAutocomplete Or hfEnableIME
  210. End Enum
  211. Public Enum DownloadCtrlFlags
  212.    DLCTL_DLIMAGES = &H10&
  213.    DLCTL_VIDEOS = &H20&
  214.    DLCTL_BGSOUNDS = &H40&
  215.    DLCTL_NO_SCRIPTS = &H80&
  216.    DLCTL_NO_JAVA = &H100&
  217.    DLCTL_NO_RUNACTIVEXCTLS = &H200&
  218.    DLCTL_NO_DLACTIVEXCTLS = &H400&
  219.    DLCTL_DOWNLOADONLY = &H800&
  220.    DLCTL_NO_FRAMEDOWNLOAD = &H1000&
  221.    DLCTL_RESYNCHRONIZE = &H2000&
  222.    DLCTL_PRAGMA_NO_CACHE = &H4000&
  223.    DLCTL_NO_BEHAVIORS = &H8000&
  224.    DLCTL_NO_METACHARSET = &H10000
  225.    DLCTL_URL_ENCODING_DISABLE_UTF8 = &H20000
  226.    DLCTL_URL_ENCODING_ENABLE_UTF8 = &H40000
  227.    DLCTL_FORCEOFFLINE = &H10000000
  228.    DLCTL_NO_CLIENTPULL = &H20000000
  229.    DLCTL_SILENT = &H40000000
  230.    DLCTL_OFFLINE = &H80000000
  231.    DLCTL_Default = DLCTL_BGSOUNDS Or DLCTL_DLIMAGES Or DLCTL_VIDEOS ' Or DLCTL_SILENT
  232. End Enum
  233. ' ===== Events =====
  234. Event ExecCommand(nCmdID As olelib.WBIDM)
  235. Event GetExternal(External As Object)
  236. Event KeyDown(KeyCode As Integer, Shift As Integer)
  237. Event KeyPress(KeyAscii As Integer)
  238. Event KeyUp(KeyCode As Integer, Shift As Integer)
  239. Event OleDragDrop(ByVal Data As DataObjectWB, ByVal KeyState As Long, _
  240.                   ByVal x As Long, ByVal y As Long, Effect As Long)
  241. Event OLEDragOver(ByVal Data As DataObjectWB, ByVal KeyState As Long, _
  242.                   ByVal x As Long, ByVal y As Long, Effect As Long)
  243. Event OLEDragEnter(ByVal Data As DataObjectWB, ByVal KeyState As Long, _
  244.                   ByVal x As Long, ByVal y As Long, Effect As Long)
  245. Event OLEDragLeave()
  246. Event ProcessAction(ByVal url As String, ByVal Action As olelib.URLACTIONS, _
  247.                    Policy As URLPOLICIES)
  248. Event ShowContextMenu(ByVal ItemType As ContextMenuTarget, ByVal HTMLElement As Object, cancel As Boolean)
  249. Event TranslateURL(url As String)
  250. '开始下载,>=ie5.5
  251. Public Event DownloadBegin(url$, ByRef cancel&)
  252. Private WithEvents vFrmWeb As Form
  253. Attribute vFrmWeb.VB_VarHelpID = -1
  254. Private Const WM_KEYDOWN = &H100
  255. Private Const WM_KEYUP = &H101
  256. Private Const WM_CHAR = &H102
  257. '是否已经创建
  258. Private Created As Boolean
  259. 'Private Declare Function MessageBox Lib "user32" Alias "MessageBoxA" (ByVal hwnd As Long, ByVal lpText As String, ByVal lpCaption As String, ByVal wType As Long) As Long
  260. '
  261. ' Returns whether the control is in browse or edit mode
  262. '
  263. ' This property must have DISPIP = -709 (AMBIENT_USERMODE)
  264. '
  265. Public Property Get BrowseMode() As Boolean
  266. Attribute BrowseMode.VB_UserMemId = -709
  267.    BrowseMode = m_bBrowseMode
  268. End Property
  269. Public Property Let BrowseMode(New_BrowseMode As Boolean)
  270. Dim oOC As IOleControl
  271.    m_bBrowseMode = New_BrowseMode
  272.    ' Get the WB IOleControl
  273.    Set oOC = m_oWebBrowser
  274.    ' Notify the WB control that
  275.    ' the property was changed
  276.    oOC.OnAmbientPropertyChange AMBIENT_DISPIDS.DISPID_AMBIENT_USERMODE
  277. End Property
  278. '
  279. ' DownloadCtrl
  280. '
  281. ' Returns the download control flags. This property
  282. ' is called by the WB control to get the flags.
  283. '
  284. ' Be sure that the property ID is set to -5512.
  285. '
  286. Public Property Get DownloadCtrl() As DownloadCtrlFlags
  287. Attribute DownloadCtrl.VB_UserMemId = -5512
  288.    DownloadCtrl = m_lDownloadCtrl
  289. End Property
  290. Public Property Let DownloadCtrl(ByVal NewFlags As DownloadCtrlFlags)
  291. Dim oOC As IOleControl
  292.    m_lDownloadCtrl = NewFlags
  293. If Created Then
  294.    ' Get the WB IOleControl
  295.    Set oOC = m_oWebBrowser
  296.    ' Notify the WB control that
  297.    ' the property was changed
  298.    oOC.OnAmbientPropertyChange -5512
  299. End If
  300. End Property
  301. '
  302. ' Exec
  303. '
  304. ' Executes an OLE command
  305. '
  306. Public Sub Exec(ByVal CMDID As WBIDM, Optional ByVal CMDOPT As OLECMDEXECOPT = OLECMDEXECOPT_DODEFAULT, Optional ByVal VarIn As Variant, Optional VarOut As Variant)
  307. Dim oCommandTarget As olelib.IOleCommandTarget      ' WebBrowser's IOleCommandTarget interface
  308.    Set oCommandTarget = m_oWebBrowser
  309.    ' Execute the command
  310.    oCommandTarget.Exec CGID_HTML, CMDID, CMDOPT, VarIn, VarOut
  311. End Sub
  312. '
  313. ' pvAddRefMe
  314. '
  315. ' Increments the reference count of this control
  316. '
  317. Private Sub pvAddRefMe()
  318. Dim oUnk As olelib.IUnknown
  319.    Set oUnk = Me
  320.    oUnk.AddRef
  321. End Sub
  322. '
  323. ' QueryStatus
  324. '
  325. ' Queries an OLE command status
  326. '
  327. Public Function QueryStatus(ByVal CMDID As WBIDM, Optional name As String) As Long
  328. Dim uOLECMD As OLECMD
  329. Dim uCMDTEXT As OLECMDTEXT
  330. Dim oCommandTarget As olelib.IOleCommandTarget      ' WebBrowser's IOleCommandTarget interface
  331.    Set oCommandTarget = m_oWebBrowser
  332.    ' Initialize the UDTs
  333.    uOLECMD.CMDID = CMDID
  334.    uCMDTEXT.cmdtextf = OLECMDTEXTF_NAME
  335.    uCMDTEXT.cwBuf = 260
  336.    ' Query the status
  337.    oCommandTarget.QueryStatus CGID_HTML, 1, uOLECMD, uCMDTEXT
  338.    ' Return the status
  339.    QueryStatus = uOLECMD.cmdf
  340.    ' Return the name
  341.    name = uCMDTEXT.rgwz
  342.    name = Left$(name, InStr(name, vbNullChar) - 1)
  343. End Function
  344. '
  345. ' pvCreateWBControl
  346. '
  347. ' Creates the WebBrowser control
  348. '
  349. Private Sub pvCreateWBControl()
  350. Dim oOleObj As IOleObject
  351. Dim oUnk As olelib.IUnknown
  352. 'Dim oFrame As IOleInPlaceFrame
  353. Dim oOC As IOleControl
  354. Dim tMSG As olelib.MSG
  355. Dim tRect As olelib.RECT
  356.    ' Create the WebBrowser control
  357.    CoCreateInstance CLSID_WebBrowser, Nothing, CLSCTX_INPROC_SERVER, IID_IUnknown, oUnk
  358.    
  359.    ' Get the WebBrowser interface
  360.    Set m_oWebBrowser = oUnk
  361.    
  362.    ' Get the IOleObject interface
  363.    Set oOleObj = m_oWebBrowser
  364.    
  365.    ' Set the client site
  366.    oOleObj.SetClientSite Me
  367.    
  368.    ' Activate the document
  369.    oOleObj.DoVerb OLEIVERB_UIACTIVATE, tMSG, Me, 0, vFrmWeb.hWnd, tRect
  370. Created = True
  371.    ' Force the WB control to get the
  372.    ' UA and download control properties
  373.    Set oOC = oOleObj
  374.    oOC.OnAmbientPropertyChange -5513
  375.    oOC.OnAmbientPropertyChange -5512
  376.    
  377. End Sub
  378. '
  379. ' UserAgent
  380. '
  381. ' Returns the UserAgent. This property
  382. ' is called by the WB control to get the UA
  383. ' that it'll send to the server.
  384. '
  385. ' Be sure that the property ID is set to -5513.
  386. '
  387. Public Property Get UserAgent() As String
  388. Attribute UserAgent.VB_UserMemId = -5513
  389.    UserAgent = m_sUserAgent
  390. End Property
  391. Public Property Let UserAgent(ByVal New_UA As String)
  392. Dim oOC As IOleControl
  393.    m_sUserAgent = New_UA
  394. If Created Then
  395.    ' Get the WB IOleControl
  396.    Set oOC = m_oWebBrowser
  397.    ' Notify the WB control that
  398.    ' the property was changed
  399.    oOC.OnAmbientPropertyChange -5513
  400. End If
  401. End Property
  402. Private Sub Class_Initialize()
  403. Call IniVars
  404. End Sub
  405. Private Sub Class_Terminate()
  406. 'Dim tUr As olelib.IUnknown
  407. 'Set tUr = Me
  408. 'tUr.Release
  409. End Sub
  410. Private Sub IDocHostShowUI_ShowHelp(ByVal hWnd As Long, ByVal pszHelpFile As Long, ByVal uCommand As Long, ByVal dwData As Long, ByVal x As Long, ByVal y As Long, ByVal pDispatchObjectHit As Object)
  411. Dim rtn As Long
  412. 'Debug.Print "showhelp"
  413. If Not MessageCallback Is Nothing Then
  414.    rtn = MessageCallback.ShowHelp(SysAllocString(pszHelpFile), uCommand, dwData, x, y, pDispatchObjectHit)
  415. End If
  416. End Sub
  417. Private Function IDocHostShowUI_ShowMessage(ByVal hWnd As Long, ByVal lpszText As Long, ByVal lpszCaption As Long, ByVal dwType As Long, ByVal lpszHelpFile As Long, ByVal dwHelpContext As Long) As Long
  418. Debug.Print "showmessage"
  419. Dim rtn As Long
  420. Dim tText As String
  421. Dim tActiveX As Boolean
  422. tText = SysAllocString(lpszText)
  423. tActiveX = (InStr(tText, " ActiveX ") > 0)
  424. 'debug.Print tActiveX
  425. If ((dwType And vbOKOnly) = vbOKOnly) And tActiveX Then
  426. Else
  427.     If MessageCallback Is Nothing Then
  428.         'If (dwType And vbOKOnly) = vbOKOnly Then
  429.         '    MessageBox vFrmWeb.hwnd, SysAllocString(lpszText), App.Title, dwType
  430.         'Else
  431.             rtn = MsgBox(SysAllocString(lpszText), dwType, App.Title, SysAllocString(lpszHelpFile), dwHelpContext)
  432.         'End If
  433.     Else
  434.         rtn = MessageCallback.ShowMessage(SysAllocString(lpszText), dwType, App.Title, SysAllocString(lpszHelpFile), dwHelpContext)
  435.     End If
  436. End If
  437. IDocHostShowUI_ShowMessage = rtn
  438. End Function
  439. Private Sub IDownloadManager_Download(ByVal pmk As olelib.IMoniker, ByVal pbc As olelib.IBindCtx, ByVal dwBindVerb As Long, ByVal grfBINDF As Long, pbindinfo As olelib.BINDINFO, ByVal pszHeaders As Long, ByVal pszRedir As Long, ByVal uiCP As Long)
  440. Dim turl$
  441. Dim cancel&
  442. turl = SysAllocString(pmk.GetDisplayName(pbc, Nothing))
  443. RaiseEvent DownloadBegin(turl, cancel)
  444. If cancel = 1 Then
  445. Else
  446.     Err.Raise S_OK
  447. End If
  448. End Sub
  449. Private Sub IInternetSecurityManager_GetSecurityId( _
  450.    ByVal pwszUrl As Long, _
  451.    ByVal pbSecurityId As Long, _
  452.    pcbSecurityId As Long, _
  453.    ByVal dwReserved As Long)
  454.    ' Default action
  455.    Err.Raise INET_E_DEFAULT_ACTION
  456. End Sub
  457. Private Function IInternetSecurityManager_GetSecuritySite() As olelib.IInternetSecurityMgrSite
  458.    ' Default action
  459.    Err.Raise INET_E_DEFAULT_ACTION
  460. End Function
  461. Private Sub IInternetSecurityManager_GetZoneMappings(ByVal dwZone As Long, ppenumString As olelib.IEnumString, ByVal dwFlags As Long)
  462.    ' Default action
  463.    Err.Raise INET_E_DEFAULT_ACTION
  464. End Sub
  465. Private Sub IInternetSecurityManager_MapUrlToZone(ByVal pwszUrl As Long, pdwZone As Long, ByVal dwFlags As Long)
  466.    ' Default action
  467.    Err.Raise INET_E_DEFAULT_ACTION
  468. End Sub
  469. Private Sub IInternetSecurityManager_ProcessUrlAction( _
  470.       ByVal pwszUrl As Long, _
  471.       ByVal dwAction As URLACTIONS, _
  472.       ByVal pPolicy As Long, _
  473.       ByVal cbPolicy As Long, _
  474.       pContext As Byte, _
  475.       ByVal cbContext As Long, _
  476.       ByVal dwFlags As olelib.PUAF, _
  477.       ByVal dwReserved As Long)
  478. Dim lPolicy As olelib.URLPOLICIES
  479. Dim abPolicy(0 To 3) As Byte
  480. 'debug.Print dwAction
  481.    ' Get the policy for the
  482.    ' control security zone
  483.    m_oZM.GetZoneActionPolicy SecurityZone, dwAction, abPolicy(0), 4&, URLZONEREG_DEFAULT
  484.    MoveMemory lPolicy, abPolicy(0), 4&
  485.    ' Ask the container for a policy.
  486.    ' This allows the container to
  487.    ' overwrite the policies for the
  488.    ' selected security zone
  489.    RaiseEvent ProcessAction(SysAllocString(pwszUrl), dwAction, lPolicy)
  490.    ' Copy the policy to the pointer
  491.    MoveMemory ByVal pPolicy, lPolicy, 4&
  492. End Sub
  493. Private Sub IInternetSecurityManager_QueryCustomPolicy(ByVal pwszUrl As Long, guidKey As olelib.UUID, ppPolicy As Long, pcbPolicy As Long, pContext As Byte, ByVal cbContext As Long, Optional ByVal dwReserved As Long = 0&)
  494.    ' Default action
  495.    Err.Raise INET_E_DEFAULT_ACTION
  496. End Sub
  497. Private Sub IInternetSecurityManager_SetSecuritySite(ByVal pSite As olelib.IInternetSecurityMgrSite)
  498.    ' Default action
  499.    Err.Raise INET_E_DEFAULT_ACTION
  500. End Sub
  501. Private Sub IInternetSecurityManager_SetZoneMapping(ByVal dwZone As Long, ByVal lpszPattern As Long, ByVal dwFlags As olelib.SZM_FLAGS)
  502.    ' Default action
  503.    Err.Raise INET_E_DEFAULT_ACTION
  504. End Sub
  505. Private Function IOleClientSite_GetContainer() As olelib.IOleContainer
  506.    Err.Raise E_NOTIMPL
  507. End Function
  508. Private Function IOleClientSite_GetMoniker(ByVal dwAssign As olelib.OLEGETMONIKER, ByVal dwWhichMoniker As olelib.OLEWHICHMK) As olelib.IMoniker
  509.    Err.Raise E_NOTIMPL
  510. End Function
  511. Private Sub IOleClientSite_OnShowWindow(ByVal fShow As olelib.bool)
  512.    Err.Raise E_NOTIMPL
  513. End Sub
  514. Private Sub IOleClientSite_RequestNewObjectLayout()
  515.    Err.Raise E_NOTIMPL
  516. End Sub
  517. Private Sub IOleClientSite_SaveObject()
  518. End Sub
  519. Private Sub IOleClientSite_ShowObject()
  520.    Err.Raise E_NOTIMPL
  521. End Sub
  522. Private Sub IOleCommandTarget_Exec(pguidCmdGroup As olelib.UUID, _
  523.         ByVal nCmdID As Long, ByVal nCmdexecopt As olelib.OLECMDEXECOPT, _
  524.         pvaIn As Variant, pvaOut As Variant)
  525. 'Debug.Print "cmd", nCmdID
  526. If VarPtr(pguidCmdGroup) <> 0 Then
  527.     If IsEqualGUID(pguidCmdGroup, CGID_DocHostCommandHandler) = 1 Then
  528.         Select Case nCmdID
  529.             Case OLECMDID_SHOWSCRIPTERROR
  530.             
  531.             Case Else
  532.                 Err.Raise OLECMDERR_E_NOTSUPPORTED
  533.         End Select
  534.     Else
  535.         Err.Raise OLECMDERR_E_UNKNOWNGROUP
  536.     End If
  537.         
  538. Else
  539.     Err.Raise OLECMDERR_E_UNKNOWNGROUP
  540. End If
  541. End Sub
  542. Private Sub IOleCommandTarget_QueryStatus(pguidCmdGroup As olelib.UUID, ByVal cCmds As Long, prgCmds As olelib.OLECMD, pCmdText As olelib.OLECMDTEXT)
  543. End Sub
  544. Private Sub IOleInPlaceSite_CanInPlaceActivate()
  545. End Sub
  546. Private Sub IOleInPlaceSite_ContextSensitiveHelp(ByVal fEnterMode As olelib.bool)
  547. End Sub
  548. Private Sub IOleInPlaceSite_DeactivateAndUndo()
  549. 'debug.Print "IOleInPlaceSite_DeactivateAndUndo"
  550. End Sub
  551. Private Sub IOleInPlaceSite_DiscardUndoState()
  552. End Sub
  553. Private Function IOleInPlaceSite_GetWindow() As Long
  554.    IOleInPlaceSite_GetWindow = vFrmWeb.hWnd
  555. End Function
  556. Private Sub IOleInPlaceSite_GetWindowContext(ppFrame As olelib.IOleInPlaceFrame, ppDoc As olelib.IOleInPlaceUIWindow, lprcPosRect As olelib.RECT, lprcClipRect As olelib.RECT, lpFrameInfo As olelib.OLEINPLACEFRAMEINFO)
  557.    
  558.    Set ppFrame = vFrmWeb ' Me
  559.    Set ppDoc = Me
  560.    
  561.    lpFrameInfo.hwndFrame = vFrmWeb.hWnd
  562.    
  563. End Sub
  564. Private Sub IOleInPlaceSite_OnInPlaceActivate()
  565.     'debug.Print "IOleInPlaceSite_OnInPlaceActivate"
  566. End Sub
  567. Private Sub IOleInPlaceSite_OnInPlaceDeactivate()
  568. 'debug.Print "IOleInPlaceSite_OnInPlaceDeactivate"
  569. End Sub
  570. Private Sub IOleInPlaceSite_OnPosRectChange(lprcPosRect As olelib.RECT)
  571. End Sub
  572. Private Sub IOleInPlaceSite_OnUIActivate()
  573. 'Debug.Print "IOleInPlaceSite_OnUIActivate"
  574. vFrmWeb.SetFocus
  575. End Sub
  576. Private Sub IOleInPlaceSite_OnUIDeactivate(ByVal fUndoable As olelib.bool)
  577. 'debug.Print "IOleInPlaceSite_OnUIDeactivate", fUndoable
  578. End Sub
  579. Private Sub IOleInPlaceSite_Scroll(ByVal scrollX As Long, ByVal scrollY As Long)
  580. Debug.Print "IOleInPlaceSite_Scroll"
  581. End Sub
  582. Private Sub IServiceProvider_QueryService(guidService As olelib.UUID, riid As olelib.UUID, ppvObject As Long)
  583. If IsEqualGUID(guidService, IID_IInternetSecurityManager) Then
  584.     Dim oISM As IInternetSecurityManager
  585.     
  586.     ' Increment the reference count
  587.     pvAddRefMe
  588.     
  589.     Set oISM = Me
  590.     
  591.     ' Return this object
  592.     MoveMemory ppvObject, oISM, 4&
  593.     
  594.     'Err.Raise S_OK
  595. Else
  596.     If IsEqualGUID(guidService, IID_IDownloadManager) And _
  597.         IsEqualGUID(riid, IID_IDownloadManager) Then
  598.       
  599.         Dim oDM As IDownloadManager
  600.         pvAddRefMe
  601.         
  602.         Set oDM = Me
  603.         
  604.         MoveMemory ppvObject, oDM, 4&
  605.     
  606.     Else
  607.         ' The service or interface is
  608.         ' not supported
  609.         Err.Raise E_NOINTERFACE
  610.     End If
  611. End If
  612. End Sub
  613. Private Sub m_oDoc_onactivate()
  614.    On Error Resume Next
  615.    
  616.    ' Set the focus when the document is activated
  617.    'If m_bGotFocus = False Then vFrmWeb.SetFocus
  618.    
  619. End Sub
  620. Private Sub m_oWebBrowser_NavigateComplete2(ByVal pDisp As Object, url As Variant)
  621.    
  622.    On Error Resume Next
  623.    
  624.    ' Get the document
  625.    Set m_oDoc = m_oWebBrowser.Document
  626.    
  627. End Sub
  628. Private Sub IDocHostUIHandler_EnableModeless(ByVal fEnable As olelib.bool)
  629.    Err.Raise E_NOTIMPL
  630. End Sub
  631. Private Function IDocHostUIHandler_FilterDataObject(ByVal pDO As olelib.IDataObject) As olelib.IDataObject
  632.    Err.Raise E_NOTIMPL
  633. End Function
  634. Private Function IDocHostUIHandler_GetDropTarget(ByVal pDropTarget As olelib.IDropTarget) As olelib.IDropTarget
  635.    ' Replace the IDropTarget interface
  636.    ' of the browser object
  637.    Set IDocHostUIHandler_GetDropTarget = Me
  638. End Function
  639. Private Function IDocHostUIHandler_GetExternal() As Object
  640.     Set IDocHostUIHandler_GetExternal = vFrmWeb
  641.     'RaiseEvent GetExternal(IDocHostUIHandler_GetExternal)
  642. End Function
  643. Private Sub IDocHostUIHandler_GetHostInfo(pInfo As olelib.DOCHOSTUIINFO)
  644.    pInfo.dwFlags = HostInfo
  645.    pInfo.dwDoubleClick = DOCHOSTUIDBLCLK_DEFAULT
  646. End Sub
  647. Private Sub IDocHostUIHandler_GetOptionKeyPath(pOLESTRchKey As Long, ByVal dw As Long)
  648.    Err.Raise E_NOTIMPL
  649. End Sub
  650. Private Sub IDocHostUIHandler_GetOverrideKeyPath(pchKey As Long, ByVal dw As Long)
  651.    Err.Raise E_NOTIMPL
  652. End Sub
  653. Private Sub IDocHostUIHandler_HideUI()
  654. '   Err.Raise E_NOTIMPL
  655. End Sub
  656. Private Sub IDocHostUIHandler_OnDocWindowActivate(ByVal fActivate As olelib.bool)
  657. '   Err.Raise S_OK 'E_NOTIMPL
  658. End Sub
  659. Private Sub IDocHostUIHandler_OnFrameWindowActivate(ByVal fActivate As olelib.bool)
  660. 'debug.Print "IDocHostUIHandler_OnFrameWindowActivate", fActivate
  661. '   Err.Raise S_OK 'E_NOTIMPL
  662. End Sub
  663. Private Sub IDocHostUIHandler_ResizeBorder(prcBorder As olelib.RECT, ByVal pUIWindow As olelib.IOleInPlaceUIWindow, ByVal fRameWindow As olelib.bool)
  664. 'Debug.Print "uihandle resieze"
  665. '   Err.Raise E_NOTIMPL
  666. End Sub
  667. Private Sub IDocHostUIHandler_ShowContextMenu(ByVal dwContext As olelib.ContextMenuTarget, pPOINT As olelib.POINT, ByVal pCommandTarget As olelib.IOleCommandTarget, ByVal HTMLTagElement As Object)
  668. Dim bCancel As Boolean
  669.    ' Raise the event
  670.    RaiseEvent ShowContextMenu(dwContext, HTMLTagElement, bCancel)
  671.    ' If bCancel = False show
  672.    ' the context menu
  673.    If Not bCancel Then Err.Raise E_NOTIMPL
  674. End Sub
  675. Private Sub IDocHostUIHandler_ShowUI(ByVal dwID As Long, ByVal pActiveObject As olelib.IOleInPlaceActiveObject, ByVal pCommandTarget As olelib.IOleCommandTarget, ByVal pFrame As olelib.IOleInPlaceFrame, ByVal pDoc As olelib.IOleInPlaceUIWindow)
  676. '   Err.Raise E_NOTIMPL
  677. End Sub
  678. Private Sub IDocHostUIHandler_TranslateAccelerator(lpmsg As olelib.MSG, pguidCmdGroup As olelib.UUID, ByVal nCmdID As Long)
  679. Dim Shift As Integer, Char As Integer
  680.    If nCmdID = 0 Then
  681.       ' Raise keyboard events
  682.       Select Case lpmsg.message
  683.          Case WM_CHAR
  684.             Char = lpmsg.wParam
  685.             RaiseEvent KeyPress(Char)
  686.             If Char = 0 Then Exit Sub
  687.          Case WM_KEYDOWN
  688.             If GetAsyncKeyState(vbKeyShift) Then Shift = Shift Or vbShiftMask
  689.             If GetAsyncKeyState(vbKeyMenu) Then Shift = Shift Or vbAltMask
  690.             If GetAsyncKeyState(vbKeyControl) Then Shift = Shift Or vbCtrlMask
  691.             Char = lpmsg.wParam
  692.             RaiseEvent KeyDown(Char, Shift)
  693.             If Char = 0 Then Exit Sub
  694.          Case WM_KEYUP
  695.             If GetAsyncKeyState(vbKeyShift) Then Shift = Shift Or vbShiftMask
  696.             If GetAsyncKeyState(vbKeyMenu) Then Shift = Shift Or vbAltMask
  697.             If GetAsyncKeyState(vbKeyControl) Then Shift = Shift Or vbCtrlMask
  698.             Char = lpmsg.wParam
  699.             RaiseEvent KeyUp(Char, Shift)
  700.             If Char = 0 Then Exit Sub
  701.       End Select
  702.    Else
  703.       ' Check for the command group
  704.       ' and raise the ExecCommand event
  705.       If IsEqualGUID(pguidCmdGroup, CGID_HTML) Then
  706.          RaiseEvent ExecCommand(nCmdID)
  707.          If nCmdID = 0 Then Exit Sub
  708.       End If
  709.    End If
  710.    ' Let the WB process this
  711.    ' accelerator
  712.     Err.Raise E_NOTIMPL
  713. End Sub
  714. Private Function IDocHostUIHandler_TranslateUrl(ByVal dwTranslate As Long, ByVal pchURLIn As Long) As Long
  715. 'Debug.Print "IDocHostUIHandler_TranslateUrl:"
  716. Dim sURL As String
  717.    ' Get the URL from the pointer
  718.    sURL = SysAllocString(pchURLIn)
  719.    ' Raise the event
  720.    RaiseEvent TranslateURL(sURL)
  721.    
  722.    ' Return the new URL
  723.    IDocHostUIHandler_TranslateUrl = Str2Ptr(sURL)
  724. End Function
  725. Private Sub IDocHostUIHandler_UpdateUI()
  726. '   Err.Raise E_NOTIMPL
  727. End Sub
  728. Private Sub IDropTarget_DragEnter(ByVal pDataObj As olelib.IDataObject, ByVal grfKeyState As Long, ByVal ptX As Long, ByVal pyY As Long, pdwEffect As olelib.DROPEFFECTS)
  729.    ' Create the data object
  730.    Set m_oDataObject = New DataObjectWB
  731.    ' Set the IDataObject property
  732.    Set m_oDataObject.IDataObject = pDataObj
  733.    RaiseEvent OLEDragEnter(m_oDataObject, grfKeyState, ptX, pyY, pdwEffect)
  734. End Sub
  735. Private Sub IDropTarget_DragLeave()
  736.    RaiseEvent OLEDragLeave
  737.    ' Destroy the data object
  738.    Set m_oDataObject = Nothing
  739. End Sub
  740. Private Sub IDropTarget_DragOver(ByVal grfKeyState As Long, ByVal ptX As Long, ByVal ptY As Long, pdwEffect As olelib.DROPEFFECTS)
  741.    RaiseEvent OLEDragOver(m_oDataObject, grfKeyState, ptX, ptY, pdwEffect)
  742. End Sub
  743. Private Sub IDropTarget_Drop(ByVal pDataObj As olelib.IDataObject, ByVal grfKeyState As Long, ByVal ptX As Long, ByVal ptY As Long, pdwEffect As olelib.DROPEFFECTS)
  744.    ' Update the IDataObject property
  745.    Set m_oDataObject.IDataObject = pDataObj
  746.    
  747.    RaiseEvent OleDragDrop(m_oDataObject, grfKeyState, ptX, ptY, pdwEffect)
  748. End Sub
  749. '
  750. ' WBCtrl
  751. '
  752. ' Return the WebBrowser control instance
  753. '
  754. Public Property Get WBCtrl() As SHDocVw.WebBrowser
  755. Attribute WBCtrl.VB_UserMemId = 0
  756.    Set WBCtrl = m_oWebBrowser
  757. End Property
  758. Private Sub vFrmWeb_Activate()
  759. ActiveMe 1
  760. End Sub
  761. 'Private Sub vFrmWeb_Deactivate()
  762. 'ActiveMe 0
  763. '
  764. 'End Sub
  765. '
  766. Private Sub vFrmWeb_GotFocus()
  767. ActiveMe 1
  768. End Sub
  769. '
  770. 'Private Sub vFrmWeb_LostFocus()
  771. 'ActiveMe 0
  772. 'End Sub
  773. Public Sub ActiveMe(fActive As bool)
  774. Dim oOO As olelib.IOleInPlaceActiveObject
  775.    Set oOO = m_oWebBrowser
  776.    ' Notify the control that the window was activated
  777.    oOO.OnFrameWindowActivate fActive
  778.    
  779. End Sub
  780. Private Sub vFrmWeb_Resize()
  781. Call ResizeWeb
  782. End Sub
  783. Public Sub ResizeWeb()
  784. Dim oOO As IOleInPlaceObject
  785. Dim tRect As olelib.RECT
  786.    ' Get the IOleInPlaceObject interface
  787.    Set oOO = m_oWebBrowser
  788.    
  789.    ' Resize the control
  790.    tRect.Right = vFrmWeb.ScaleWidth
  791.    tRect.Bottom = vFrmWeb.ScaleHeight
  792.    oOO.SetObjectRects tRect, tRect
  793. End Sub
  794. Public Sub INIAll(nfrm As Form)
  795. nfrm.ScaleMode = vbPixels
  796. Set vFrmWeb = nfrm
  797. Call pvCreateWBControl
  798. Call ResizeWeb
  799. End Sub
  800. Private Sub IniVars()
  801. Created = False
  802. ' Initialize global variables
  803. If CF_URL = 0 Then mWebbrowser.Initialize
  804. ' Initialize properties
  805. m_lDownloadCtrl = DLCTL_Default
  806. m_bBrowseMode = True
  807. ' Create the Zone Manager object
  808. CoInternetCreateZoneManager Nothing, m_oZM, 0
  809. SecurityZone = Internet
  810. HostInfo = hfDefault
  811. m_sUserAgent = ""
  812. End Sub
  813. Public Sub Release()
  814. Dim oOleObj As IOleObject
  815. Dim tMSG As olelib.MSG
  816. Dim tRect As olelib.RECT
  817.    
  818.    ' Get the IOleObject interface
  819.    Set oOleObj = m_oWebBrowser
  820.    
  821.    
  822.    ' Activate the document
  823.    oOleObj.DoVerb OLEIVERB_INPLACEACTIVATE, tMSG, Me, 0, vFrmWeb.hWnd, tRect
  824. End Sub