SimpleBrowser.h
上传用户:dengkfang
上传日期:2008-12-30
资源大小:5233k
文件大小:7k
源码类别:

CA认证

开发平台:

Visual C++

  1. /////////////////////////////////////////////////////////////////////////////
  2. // SimpleBrowser: Web browser control
  3. /////////////////////////////////////////////////////////////////////////////
  4. //
  5. // Change History:
  6. //
  7. // April 6, 2003 - Original release, and article posted at
  8. //   http://www.codeproject.com/useritems/SimpleBrowserForMFC.asp
  9. //
  10. // April 12, 2003 - Replaced NavigateString() with Write() and Clear().
  11. // - Added logic to Create() to wait for document ready.
  12. // - Added GetDocument() method.
  13. // - Added notification support.
  14. // - Added post data and headers to BeforeNavigate2 handling.
  15. //
  16. #if !defined(SimpleBrowser_defined)
  17. #define SimpleBrowser_defined
  18. #include "mshtml.h"
  19. class SimpleBrowser : public CWnd {
  20. public:
  21. // construction and creation
  22.     SimpleBrowser();
  23.     virtual ~SimpleBrowser();
  24. BOOL Create(DWORD dwStyle, 
  25.             const RECT& rect, 
  26. CWnd* pParentWnd, 
  27. UINT nID);
  28. // create browser directly
  29. BOOL CreateFromControl(CWnd *pParentWnd,UINT nID);
  30. // create browser in place of dialog control; the dialog control 
  31. // identified by nID will be destroyed, and the browser will take
  32. // its place
  33.     // controls
  34. void Navigate(LPCTSTR URL);
  35. // navigate to URL
  36. void Write(LPCTSTR string);
  37. // append string to current document; note that the WebBrowser control tolerates
  38. // poorly formed documents, like:
  39. // <html><body>....
  40. // --- no trailing body or html tags
  41. // <html><body>...</body></html><html><body>...</body></html>...
  42. // --- multiple documents
  43. void Clear();
  44. // clear current document
  45. void NavigateResource(int resource_ID);
  46. // navigate to HTML document resource
  47. void GoBack(); // navigate backward one item
  48. // in the history list
  49.     void GoForward(); // navigate forward one item
  50. // in the history list
  51.     void GoHome(); // navigate to current 
  52. // home or start page
  53.     void Refresh(); // refresh contents
  54.     void Stop(); // stop current activity
  55.     void Print(LPCTSTR header = _T("&w&b&b&p"),
  56.    LPCTSTR footer = _T("&d &t"));
  57.    
  58. // start printing contents; uses same 'metacharacters' for header and
  59. // footer as Internet Explorer; see IE Page Setup dialog
  60.     bool GetBusy();                         // returns true if browser
  61.                                             // busy downloading or other
  62.                                             // activity
  63.     CString GetLocationName();              // get name of location currently
  64.                                             // being browsed (title, if HTML
  65.                                             // page; UNC path if file)
  66.     CString GetLocationURL();               // get URL of location currently
  67.                                             // being browsed
  68.     READYSTATE GetReadyState();             // get browser ready state
  69.     bool GetSilent();                       // get/set silent property
  70.     void PutSilent(bool silent = false); // (if true, dialog and message
  71.                                             //  boxes may not be shown)
  72. IHTMLDocument2 *GetDocument(); // get document interface; returns NULL 
  73. // if interface is not available 
  74. // (which is the case if you've navigated to
  75. //  something that's NOT an HTML document,
  76. //  like an Excel spreadsheet, which the
  77. //  WebBrowser control is perfectly willing
  78. //  to host)
  79.     // events (overridables)
  80.     virtual bool OnBeforeNavigate2(CString URL,
  81.                                CString frame,
  82.    void *post_data,int post_data_size,
  83.    CString headers);
  84.         // called before navigation begins; URL is destination, frame
  85.         // is frame name ("" if none), post_data is HTTP POST data (NULL if none),
  86. // and headers are HTTP headers sent to server;
  87. // return true to cancel navigation, false to continue
  88.     virtual void OnDocumentComplete(CString URL);
  89.         // navigation to document complete; URL is location
  90.     virtual void OnDownloadBegin();
  91. // navigation operation begins
  92.     virtual void OnProgressChange(int progress,int progress_max);
  93.          // navigation progress update
  94.     virtual void OnDownloadComplete();
  95.      // navigation operation completed
  96.     virtual void OnNavigateComplete2(CString URL);
  97.         // navigation to hyperlink complete; URL is location
  98. // (URL = string if NavigateString or NavigateResource are used)
  99.     virtual void OnStatusTextChange(CString text);
  100.         // status text has changed
  101.     virtual void OnTitleChange(CString text);
  102. // title has changed
  103. // notifications
  104. enum NotificationType { // Note: SimpleBrowser does NOT support the
  105. //       common notifications (NM_CLICK, etc.)
  106. BeforeNavigate2, // set *LRESULT=TRUE to cancel navigation
  107. DocumentComplete,
  108. DownloadBegin,
  109. ProgressChange,
  110. DownloadComplete,
  111. NavigateComplete2,
  112. StatusTextChange,
  113. TitleChange
  114. };
  115. class Notification { // all notifications pass this structure
  116. public:
  117. Notification(HWND hwnd,UINT ID,NotificationType type);
  118. NMHDR hdr; // hdr.hwndFrom = SimpleBrowser's HWND
  119. // hdr.idFrom   = SimpleBrowser's control ID
  120. // hdr.code     = <NavigationType>
  121. CString URL; // BeforeNavigate2
  122. // DocumentComplete
  123. // NavigateComplete2
  124. CString frame; // BeforeNavigate2
  125. void *post_data; // BeforeNavigate2
  126. int post_data_size;
  127. CString headers; // BeforeNavigate2
  128. int progress; // ProgressChange
  129. int progress_max; // ProgressChange
  130. CString text; // StatusTextChange
  131. // TitleChange
  132. };
  133.     //{{AFX_VIRTUAL(SimpleBrowser)
  134. public:
  135. virtual void PostNcDestroy();
  136. //}}AFX_VIRTUAL
  137. protected:
  138.     //{{AFX_MSG(SimpleBrowser)
  139. afx_msg void OnSize(UINT nType, int cx, int cy);
  140. //}}AFX_MSG
  141.     void _OnBeforeNavigate2(LPDISPATCH lpDisp,
  142.                             VARIANT FAR *URL,
  143.                             VARIANT FAR *Flags,
  144.                             VARIANT FAR *TargetFrameName,
  145.                             VARIANT FAR *PostData,
  146.                             VARIANT FAR *Headers,
  147.                             VARIANT_BOOL *Cancel);
  148.     void _OnDownloadBegin();
  149.     void _OnProgressChange(long progress,long progress_max);
  150.     void _OnDownloadComplete();
  151.     void _OnDocumentComplete(LPDISPATCH lpDisp,VARIANT FAR* URL);
  152.     void _OnNavigateComplete2(LPDISPATCH lpDisp,VARIANT FAR* URL);
  153.     void _OnStatusTextChange(BSTR bstrText);
  154.     void _OnTitleChange(BSTR bstrText);
  155.     DECLARE_MESSAGE_MAP()
  156.     DECLARE_EVENTSINK_MAP()
  157. private:
  158.     CWnd                    _BrowserWindow;     // browser window
  159. IWebBrowser2 *_Browser;          // browser control
  160.     IDispatch               *_BrowserDispatch;  // browser control 
  161. // dispatch interface
  162. };
  163. #endif