使用soui开发的mbc,只支持windows版本
w1146869587
2022-01-24 0408576e9da10015ffa9da0079b8c985113ce4b3
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
135
136
137
138
139
#pragma once
 
#include <control/SActiveX.h>
#include <ExDisp.h>
#include <ExDispid.h>
 
namespace SOUI
{
    struct IWebEvent
    {
        virtual void BeforeNavigate2( IDispatch *pDisp,VARIANT *&url,VARIANT *&Flags,VARIANT *&TargetFrameName,VARIANT *&PostData,VARIANT *&Headers,VARIANT_BOOL *&Cancel ){}
        virtual void NavigateError(IDispatch *pDisp,VARIANT * &url,VARIANT *&TargetFrameName,VARIANT *&StatusCode,VARIANT_BOOL *&Cancel){}
        virtual void NavigateComplete2(IDispatch *pDisp,VARIANT *&url){}
        virtual void ProgressChange(LONG nProgress, LONG nProgressMax){}
        virtual void CommandStateChange(long Command,VARIANT_BOOL Enable){}
        virtual void DocumentComplete(IDispatch *pDisp, VARIANT* &url){}
        virtual void StatusTextChange(IDispatch *pDisp, VARIANT* &url){}
    };
 
    class SIECtrlEvtDispatch : public IDispatch
    {
    public:
        SIECtrlEvtDispatch(IWebEvent *pEventHandler):m_pEventHandler(pEventHandler),m_cRef(1)
        {
 
        }
 
        void SetEventHandler(IWebEvent *pEventHandler)
        {
            m_pEventHandler=pEventHandler;
        }
 
    public:// IUnknown
        STDMETHOD_(ULONG,AddRef)()
        {
            return ++m_cRef;
        }
        STDMETHOD_(ULONG,Release)()
        {
            return --m_cRef;
        }
 
        STDMETHOD(QueryInterface)(REFIID riid, LPVOID *ppvObject)
        {
            if(IsEqualGUID(riid,__uuidof(IUnknown)) 
            || IsEqualGUID(riid,__uuidof(IDispatch)))
            {
                *ppvObject=this;
                AddRef();
                return S_OK;
            }
            return E_NOINTERFACE;
        }
 
    public: //IDispatch
        virtual HRESULT STDMETHODCALLTYPE GetTypeInfoCount( 
            /* [out] */ __RPC__out UINT *pctinfo){ return E_NOTIMPL;}
 
        virtual HRESULT STDMETHODCALLTYPE GetTypeInfo( 
            /* [in] */ UINT iTInfo,
            /* [in] */ LCID lcid,
            /* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo){ return E_NOTIMPL;}
 
 
 
        virtual HRESULT STDMETHODCALLTYPE GetIDsOfNames( 
            /* [in] */ __RPC__in REFIID riid,
            /* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,
            /* [range][in] */ UINT cNames,
            /* [in] */ LCID lcid,
            /* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId){ return E_NOTIMPL;}
 
 
        virtual /* [local] */ HRESULT STDMETHODCALLTYPE Invoke( 
            /* [in] */ DISPID dispIdMember,
            /* [in] */ REFIID riid,
            /* [in] */ LCID lcid,
            /* [in] */ WORD wFlags,
            /* [out][in] */ DISPPARAMS *pDispParams,
            /* [out] */ VARIANT *pVarResult,
            /* [out] */ EXCEPINFO *pExcepInfo,
            /* [out] */ UINT *puArgErr);
 
    protected:
        IWebEvent *m_pEventHandler;
        ULONG m_cRef;
    };
 
        
    class SIECtrl :    public SActiveX, public IMessageFilter
    {
        SOUI_CLASS_NAME(SIECtrl, L"iectrl")
    public:
        SIECtrl(void);
        ~SIECtrl(void);
 
        IWebBrowser2 * GetIEObject(){return m_pIE;}
 
        SIECtrlEvtDispatch * GetEventDispatch(){return &m_eventDispatch;}
 
        BOOL Navigate(const SStringW & strUrl);
    protected:
        virtual void OnAxActivate(IUnknown *pUnknwn);
        virtual BOOL PreTranslateMessage(MSG* pMsg);
 
        int OnCreate(LPVOID);
        void OnDestroy();
 
        SOUI_MSG_MAP_BEGIN()
            MSG_WM_CREATE(OnCreate)
            MSG_WM_DESTROY(OnDestroy)
        SOUI_MSG_MAP_END()
    protected:
        HRESULT RegisterEventHandler(BOOL inAdvise );
 
 
        SOUI_ATTRS_BEGIN()
            ATTR_STRINGW(L"url",m_strUrl,FALSE)
            ATTR_INT(L"disableScrollbar",m_bDisableScrollbar,FALSE)
            ATTR_INT(L"disable3DBorder",m_bDisable3DBorder,FALSE)
            ATTR_INT(L"disableContextMenu",m_bDisableContextMenu,FALSE)
            ATTR_INT(L"disableTextSelect",m_bDisableTextSelect,FALSE)
        SOUI_ATTRS_END()
 
        SStringW m_strUrl;
 
        DWORD    m_dwCookie;
 
        SIECtrlEvtDispatch    m_eventDispatch;
        SComQIPtr<IWebBrowser2> m_pIE;
        
        BOOL                m_bDisableScrollbar;
        BOOL                m_bDisable3DBorder;
        BOOL                m_bDisableContextMenu;
        BOOL                m_bDisableTextSelect;
        HWND    m_hIEWnd;
    };
 
}