// // DnHtmlView.h : ·±Ã³¿¡¼­ »ç¿ëµÇ´Â °¡ÀÌµå ÆäÀÌÁö¸¦ Ç¥½ÃÇϱâ À§ÇÑ ·¹ÆÛ Ŭ·¡½º // #pragma once // CDnView Class class CDnView : public CView { DECLARE_DYNCREATE(CDnView) protected: CDnView(); // protected constructor used by dynamic creation virtual ~CDnView(); public: virtual void OnDraw( CDC* pDC ); // overridden to draw this view #ifdef _DEBUG virtual void AssertValid() const; #ifndef _WIN32_WCE virtual void Dump( CDumpContext& dc ) const; #endif #endif protected: DECLARE_MESSAGE_MAP() }; // CDnHtmlView Class class CDnHtmlView : public CHtmlView { DECLARE_DYNCREATE(CDnHtmlView) protected: CDnHtmlView(); // protected constructor used by dynamic creation virtual ~CDnHtmlView(); public: #ifdef _DEBUG virtual void AssertValid() const; virtual void Dump( CDumpContext& dc ) const; #endif virtual void OnNavigateError( LPCTSTR lpszURL, LPCTSTR lpszFrame, DWORD dwError, BOOL *pbCancel ); protected: virtual void DoDataExchange( CDataExchange* pDX ); // DDX/DDV support DECLARE_MESSAGE_MAP() }; // µ¥ÀÌŸ ¹Þ±â °¡´ÉÇÑ HtmlView /******************************************************************** /* 2005-2006 (C)Webmote & luo31, All Rights Reserved. /* created: 2005-5-12 10:51 /* filename: d:\luo31_prj\DHtmlViewSpec.h /*********************************************************************/ #include // CDHtmlSpecEventSink class CDHtmlSpecEventSink: public CDHtmlEventSink { public: virtual const DHtmlEventMapEntry* GetDHtmlEventMap(); virtual BOOL DHtmlEventHook(HRESULT *phr, DISPID dispIdMember, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr); virtual HRESULT GetDHtmlDocument(IHTMLDocument2 **pphtmlDoc); //create CDHtmlSpecEventSink(); void InitEventSink(IHTMLDocument2* pDoc); protected: IHTMLDocument2* m_pDocHtml; }; // CDHtmlViewSpec Html view class CDHtmlViewSpec : public CHtmlView, public CDHtmlSpecEventSink { DECLARE_DYNCREATE(CDHtmlViewSpec) protected: CDHtmlViewSpec(); virtual ~CDHtmlViewSpec(); public: #ifdef _DEBUG virtual void AssertValid() const; virtual void Dump(CDumpContext& dc) const; #endif virtual void OnDocumentComplete(LPCTSTR lpszURL); void GotoUrl(LPCTSTR pszUrl); //Implementation public: // DDX functions void DDX_DHtml_ElementText(CDataExchange* pDX, LPCTSTR szId, DISPID dispid, CString& value); void DDX_DHtml_ElementText(CDataExchange* pDX, LPCTSTR szId, DISPID dispid, short& value); void DDX_DHtml_ElementText(CDataExchange* pDX, LPCTSTR szId, DISPID dispid, int& value); void DDX_DHtml_ElementText(CDataExchange* pDX, LPCTSTR szId, DISPID dispid, long& value); void DDX_DHtml_ElementText(CDataExchange* pDX, LPCTSTR szId, DISPID dispid, DWORD& value); void DDX_DHtml_ElementText(CDataExchange* pDX, LPCTSTR szId, DISPID dispid, float& value); void DDX_DHtml_ElementText(CDataExchange* pDX, LPCTSTR szId, DISPID dispid, double& value); void DDX_DHtml_CheckBox(CDataExchange* pDX, LPCTSTR szId, int& value); void DDX_DHtml_Radio(CDataExchange* pDX, LPCTSTR szId, long& value); void DDX_DHtml_SelectValue(CDataExchange* pDX, LPCTSTR szId, CString& value); void DDX_DHtml_SelectString(CDataExchange* pDX, LPCTSTR szId, CString& value); void DDX_DHtml_SelectIndex(CDataExchange* pDX, LPCTSTR szId, long& value); void DDX_DHtml_AxControl(CDataExchange *pDX, LPCTSTR szId, DISPID dispid, VARIANT& var); void DDX_DHtml_AxControl(CDataExchange *pDX, LPCTSTR szId, LPCTSTR szPropName, VARIANT& var); protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support DECLARE_MESSAGE_MAP() // DDX Functions void DDX_DHtml_ElementText(LPCTSTR szId, DISPID dispid, CString& value, BOOL bSave); void DDX_DHtml_ElementText(LPCTSTR szId, DISPID dispid, short& value, BOOL bSave); void DDX_DHtml_ElementText(LPCTSTR szId, DISPID dispid, int& value, BOOL bSave); void DDX_DHtml_ElementText(LPCTSTR szId, DISPID dispid, long& value, BOOL bSave); void DDX_DHtml_ElementText(LPCTSTR szId, DISPID dispid, DWORD& value, BOOL bSave); void DDX_DHtml_ElementText(LPCTSTR szId, DISPID dispid, float& value, BOOL bSave); void DDX_DHtml_ElementText(LPCTSTR szId, DISPID dispid, double& value, BOOL bSave); ///////////////////////////////////////////////////////////////////////////// // Data exchange for special controls void DDX_DHtml_CheckBox(LPCTSTR szId, int& value, BOOL bSave); void DDX_DHtml_Radio(LPCTSTR szId, long& value, BOOL bSave); void DDX_DHtml_SelectValue(LPCTSTR szId, CString& value, BOOL bSave); void DDX_DHtml_SelectString(LPCTSTR szId, CString& value, BOOL bSave); void DDX_DHtml_SelectIndex(LPCTSTR szId, long& value, BOOL bSave); void DDX_DHtml_AxControl(LPCTSTR szId, DISPID dispid, VARIANT& var, BOOL bSave); void DDX_DHtml_AxControl(LPCTSTR szId, LPCTSTR szPropName, VARIANT& var, BOOL bSave); void OnDDXError(LPCTSTR szId, UINT nIDPrompt, BOOL bSave); void __cdecl DDX_DHtml_ElementTextWithFormat(LPCTSTR szId, DISPID dispid, LPCTSTR lpszFormat, UINT nIDPrompt, BOOL bSave, ...); void DDX_DHtml_ElementTextFloatFormat(LPCTSTR szId, DISPID dispid, void* pData, double value, int nSizeGcvt, BOOL bSave); BOOL _AfxSimpleScanf(LPCTSTR lpszText, LPCTSTR lpszFormat, va_list pData); BOOL _AfxSimpleFloatParse(LPCTSTR lpszText, double& d); long Select_FindString(IHTMLSelectElement *pSelect, BSTR bstr, BOOL fExact); void SetFocusToElement(LPCTSTR szId); public: void Initialize(void); protected: // event sink DWORD m_dwDHtmlEventSinkCookie; CSimpleArray m_ControlSinks; CSimpleArray m_SinkedElements; ////////////////////////////////////////////////////////////////////////// //deal event helper functions HRESULT GetElement(LPCTSTR szElementId, IDispatch **ppdisp, BOOL *pbCollection = NULL); HRESULT GetElement(LPCTSTR szElementId, IHTMLElement **pphtmlElement); template HRESULT GetElementInterface(LPCTSTR szElementId, Q** ppvObj) { return GetElementInterface(szElementId, __uuidof(Q), (void **) ppvObj); } HRESULT GetElementInterface(LPCTSTR szElementId, REFIID riid, void **ppvObj); virtual void OnNavigateComplete2(LPCTSTR strURL); virtual void OnBeforeNavigate2(LPCTSTR lpszURL, DWORD nFlags, LPCTSTR lpszTargetFrameName, CByteArray& baPostedData, LPCTSTR lpszHeaders, BOOL* pbCancel); HRESULT ConnectDHtmlEvents(IUnknown *punkDoc); void DisconnectDHtmlEvents(); HRESULT ConnectDHtmlElementEvents(DWORD_PTR dwThunkOffset = 0); BOOL FindSinkForObject(LPCTSTR szName); BOOL IsSinkedElement(IDispatch *pdispElem); void DisconnectDHtmlElementEvents(); afx_msg void OnDestroy(); public: //access HTML element BSTR GetElementText(LPCTSTR szElementId); void SetElementText(LPCTSTR szElementId, BSTR bstrText); void SetElementText(IUnknown *punkElem, BSTR bstrText); BSTR GetElementHtml(LPCTSTR szElementId); void SetElementHtml(LPCTSTR szElementId, BSTR bstrText); void SetElementHtml(IUnknown *punkElem, BSTR bstrText); VARIANT GetElementProperty(LPCTSTR szElementId, DISPID dispid); void SetElementProperty(LPCTSTR szElementId, DISPID dispid, VARIANT *pVar); HRESULT GetControlDispatch(LPCTSTR szId, IDispatch **ppdisp); VARIANT GetControlProperty(IDispatch *pdispControl, DISPID dispid); VARIANT GetControlProperty(LPCTSTR szId, DISPID dispid); VARIANT GetControlProperty(LPCTSTR szId, LPCTSTR szPropName); void SetControlProperty(IDispatch *pdispControl, DISPID dispid, VARIANT *pVar); void SetControlProperty(LPCTSTR szElementId, DISPID dispid, VARIANT *pVar); void SetControlProperty(LPCTSTR szElementId, LPCTSTR szPropName, VARIANT *pVar); HRESULT GetEvent(IHTMLEventObj **ppEventObj); public: virtual BOOL PreTranslateMessage(MSG* pMsg); };