Toon posts:

[VC++] BeforeNavigate2

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb een internet explorer toolbar gemaakt, gebaseerd op deze code http://www.codeproject.com/useritems/toolband.asp

Nu probeer ik vanuit deze toolbar het BeforeNavigate event van de webbrowser op te vangen. Nu lukt me dit dus niet, mijn beforeNav2 methode gaat nooit af.

Nu is dus de vraag of jullie weten wat ik verkeerd doe.

C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
//ToolBandObj.h : Declaration of the CToolBandObj

#ifndef __TOOLBANDOBJ_H_
#define __TOOLBANDOBJ_H_

#include "resource.h"       // main symbols
#include <exdisp.h>
#include <exdispid.h>

//
// These are needed for IDeskBand
//

#include <shlguid.h>
#include <shlobj.h>
#include "BandToolBarCtrl.h"

/////////////////////////////////////////////////////////////////////////////
// CToolBandObj
class ATL_NO_VTABLE CToolBandObj : 
    public CComObjectRootEx<CComSingleThreadModel>,
    public CComCoClass<CToolBandObj, &CLSID_ToolBandObj>,
    public IDeskBand,
    public IObjectWithSite,
    public IPersistStream,
    public IInputObject,
    public IDispatchImpl<IToolBandObj, &IID_IToolBandObj, &LIBID_TOOLBANDLib>,  
    public IDispEventImpl<0, CToolBandObj, &DIID_DWebBrowserEvents2, &LIBID_SHDocVw, 1,0>
{
public:
    CToolBandObj();

DECLARE_REGISTRY_RESOURCEID(IDR_TOOLBANDOBJ)

DECLARE_PROTECT_FINAL_CONSTRUCT()

BEGIN_CATEGORY_MAP(CToolBandObj)
//  IMPLEMENTED_CATEGORY(CATID_InfoBand)
//  IMPLEMENTED_CATEGORY(CATID_CommBand)
//  IMPLEMENTED_CATEGORY(CATID_DeskBand)
END_CATEGORY_MAP()

BEGIN_COM_MAP(CToolBandObj)
    COM_INTERFACE_ENTRY(IToolBandObj)
    COM_INTERFACE_ENTRY(IOleWindow)
    COM_INTERFACE_ENTRY_IID(IID_IDockingWindow, IDockingWindow)
    COM_INTERFACE_ENTRY(IObjectWithSite)
    COM_INTERFACE_ENTRY_IID(IID_IDeskBand, IDeskBand)
    COM_INTERFACE_ENTRY(IPersist)
    COM_INTERFACE_ENTRY(IPersistStream)
    COM_INTERFACE_ENTRY_IID(IID_IInputObject,IInputObject)
    COM_INTERFACE_ENTRY(IDispatch)
END_COM_MAP()

BEGIN_SINK_MAP(CToolBandObj)
    SINK_ENTRY_EX(0,DIID_DWebBrowserEvents2,DISPID_BEFORENAVIGATE2,beforeNav2)
END_SINK_MAP()

public:
    STDMETHOD(beforeNav2) (LPDISPATCH pDisp , VARIANT* URL,
        VARIANT* Flags, VARIANT* TargetFrameName,
        VARIANT* PostData, VARIANT* Headers, BOOL* Cancel) 
    {
        MessageBox(NULL,"Hoera een beforenavevent!","IE",MB_OK);
        return 0;
    }
    
// IDeskBand
public:
    STDMETHOD(GetBandInfo)(DWORD dwBandID, DWORD dwViewMode, DESKBANDINFO* pdbi);

// IObjectWithSite
public:
    STDMETHOD(SetSite)(IUnknown* pUnkSite);
    STDMETHOD(GetSite)(REFIID riid, void **ppvSite);

// IOleWindow
public:
    STDMETHOD(GetWindow)(HWND* phwnd);
    STDMETHOD(ContextSensitiveHelp)(BOOL fEnterMode);

// IDockingWindow
public:
    STDMETHOD(CloseDW)(unsigned long dwReserved);
    STDMETHOD(ResizeBorderDW)(const RECT* prcBorder, IUnknown* punkToolbarSite, BOOL fReserved);
    STDMETHOD(ShowDW)(BOOL fShow);

// IPersist
public:
    STDMETHOD(GetClassID)(CLSID *pClassID);

// IPersistStream
public:
    STDMETHOD(IsDirty)(void);
    STDMETHOD(Load)(IStream *pStm);
    STDMETHOD(Save)(IStream *pStm, BOOL fClearDirty);
    STDMETHOD(GetSizeMax)(ULARGE_INTEGER *pcbSize);

// IInputObject methods
public:
    STDMETHOD (UIActivateIO) (BOOL, LPMSG);
    STDMETHOD (HasFocusIO) (void);
    STDMETHOD (TranslateAcceleratorIO) (LPMSG);


// IToolBandObj
public:
    void FocusChange(bool bFocus);
    CBandToolBarCtrl* GetToolBarCtrl() {return &m_wndToolBar;}

protected:
    BOOL RegisterAndCreateWindow();

protected:
    DWORD m_dwBandID;
    DWORD m_dwViewMode;
    BOOL m_bShow;
    BOOL m_bEnterHelpMode;
    HWND m_hWndParentRebar;
    HWND m_hWnd;
    LPCSTR m_pszVerb;
    LPCTSTR m_pwszVerb;

    IInputObjectSite* m_pSite;
    IWebBrowser2* m_pWebBrowser;

    CBandToolBarReflectorCtrl m_wndInvisibleChildWnd; // Used for Reflecting Messages
    CBandToolBarCtrl m_wndToolBar;


        
};

#endif //__TOOLBANDOBJ_H_

[ Voor 3% gewijzigd door Glimi op 27-02-2003 09:53 ]


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Ammeneus, leer zelf eens debuggen :Z

Professionele website nodig?


  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
Zoals curry wat botjes zegt: Eerst even zelf debuggen is het devies. Zoek eens uit wat niet werkt, wat wel werkt, wat wordt er niet aangeroepen, wat wel ed. Zie oa Welkom in P&W -> Quickstart (update 2/10/2002)

Zou je je post willen aanvullen met die informatie? Want zo lijkt het nogal op 'zoeken jullie het even uit' en we vereisen actief meedenken hier :)

Verwijderd

Topicstarter
Excuses voor de grote lap code, alles werkt behalve het opvangen van WebBrowserEvents

Dit is het gedeelte van de code waar het over gaat:

C++:
1
2
3
4
5
6
7
8
9
10
11
12
BEGIN_SINK_MAP(CToolBandObj) 
     SINK_ENTRY_EX(0,DIID_DWebBrowserEvents2,DISPID_BEFORENAVIGATE2,beforeNav2) 
END_SINK_MAP() 

public: 
    STDMETHOD(beforeNav2) (LPDISPATCH pDisp , VARIANT* URL, 
        VARIANT* Flags, VARIANT* TargetFrameName, 
        VARIANT* PostData, VARIANT* Headers, BOOL* Cancel)  
    { 
          MessageBox(NULL,"Hoera een beforenavevent!","IE",MB_OK); 
        return 0; 
     } 


Het probleem is dus dat de methode beforeNav2 nooit afgaat.

Ik heb al ergens gevonden dat er problemen zijn met BEFORENAVIGATE2 als VS.NET wordt gebruikt, dus heb ik geprobeerd andere WebBrowserEvents (OnFullScreen, DownloadBegin) op te vangen, maar dat werkte (op deze manier) ook niet.

Ik neem aan dat ik in dit stukje een fout heb gemaakt:

C++:
1
SINK_ENTRY_EX(0,DIID_DWebBrowserEvents2,DISPID_BEFORENAVIGATE2,beforeNav2)

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Je zit hier lichtelijk buiten mijn straatje, maarruh check eens in MSDN Online, daar zit ergens een hoofdstuk "Programming and reusing the browser" dat je wel verder zou moeten kunnen helpen.

Professionele website nodig?


  • DolleDries
  • Registratie: Oktober 2000
  • Laatst online: 22-08 11:46
Heeft het wellicht iets te maken met het feit dat een toolbar geen navigatie mogelijkheden heeft & daarom ook geen navigatie callback functies activeert ??

Verwijderd

Topicstarter
Opgelost, ik moest ipv

C++:
1
public IObjectWithSite,


IObjectWithSiteImpl gebruiken en implementeren.

C++:
1
public IObjectWithSiteImpl<CToolBandObj>,
Pagina: 1