Windows Internet Explorer - MFC
#include "ExDispid.h" // IE5.5 이상
class CMFCIEView : public CHtmlView
{
protected: // create from serialization only
CMFCIEView();
DECLARE_DYNCREATE(CMFCIEView)
// ...
DECLARE_EVENTSINK_MAP()
...
virtual void OnNavigateComplete2(LPCTSTR strURL);
virtual void OnBeforeNavigate2(LPCTSTR lpszURL, DWORD nFlags,
LPCTSTR lpszTargetFrameName, CByteArray& baPostedData,
LPCTSTR lpszHeaders, BOOL* pbCancel);
virtual void OnStatusTextChange(LPCTSTR lpszText);
virtual void OnProgressChange(long nProgress, long nProgressMax);
virtual void OnCommandStateChange(long nCommand, BOOL bEnable);
virtual void OnDownloadBegin();
virtual void OnDownloadComplete();
virtual void OnTitleChange(LPCTSTR lpszText);
virtual void OnPropertyChange(LPCTSTR lpszProperty);
virtual void OnNewWindow2(LPDISPATCH* ppDisp, BOOL* Cancel);
virtual void OnDocumentComplete(LPCTSTR lpszURL);
virtual void OnQuit();
virtual void OnVisible(BOOL bVisible);
virtual void OnToolBar(BOOL bToolBar);
virtual void OnMenuBar(BOOL bMenuBar);
virtual void OnStatusBar(BOOL bStatusBar);
virtual void OnFullScreen(BOOL bFullScreen);
virtual void OnTheaterMode(BOOL bTheaterMode);
void OnWindowClosing(BOOL bIsChildWindow, BOOL *pbCancel);
void OnWindowSetHeight(long lHeight);
// ...
};
/*
#define DISPID_BEFORENAVIGATE 100 // this is sent before navigation to give a chance to abort
#define DISPID_NAVIGATECOMPLETE 101 // in async, this is sent when we have enough to show
#define DISPID_STATUSTEXTCHANGE 102
#define DISPID_QUIT 103
#define DISPID_DOWNLOADCOMPLETE 104
#define DISPID_COMMANDSTATECHANGE 105
#define DISPID_DOWNLOADBEGIN 106
#define DISPID_NEWWINDOW 107 // sent when a new window should be created
#define DISPID_PROGRESSCHANGE 108 // sent when download progress is updated
#define DISPID_WINDOWMOVE 109 // sent when main window has been moved
#define DISPID_WINDOWRESIZE 110 // sent when main window has been sized
#define DISPID_WINDOWACTIVATE 111 // sent when main window has been activated
#define DISPID_PROPERTYCHANGE 112 // sent when the PutProperty method is called
#define DISPID_TITLECHANGE 113 // sent when the document title changes
#define DISPID_TITLEICONCHANGE 114 // sent when the top level window icon may have changed.
#define DISPID_FRAMEBEFORENAVIGATE 200
#define DISPID_FRAMENAVIGATECOMPLETE 201
#define DISPID_FRAMENEWWINDOW 204
#define DISPID_BEFORENAVIGATE2 250 // hyperlink clicked on
#define DISPID_NEWWINDOW2 251
#define DISPID_NAVIGATECOMPLETE2 252 // UIActivate new document
#define DISPID_ONQUIT 253
#define DISPID_ONVISIBLE 254 // sent when the window goes visible/hidden
#define DISPID_ONTOOLBAR 255 // sent when the toolbar should be shown/hidden
#define DISPID_ONMENUBAR 256 // sent when the menubar should be shown/hidden
#define DISPID_ONSTATUSBAR 257 // sent when the statusbar should be shown/hidden
#define DISPID_ONFULLSCREEN 258 // sent when kiosk mode should be on/off
#define DISPID_DOCUMENTCOMPLETE 259 // new document goes ReadyState_Complete
#define DISPID_ONTHEATERMODE 260 // sent when theater mode should be on/off
#define DISPID_ONADDRESSBAR 261 // sent when the address bar should be shown/hidden
#define DISPID_WINDOWSETRESIZABLE 262 // sent to set the style of the host window frame
#define DISPID_WINDOWCLOSING 263 // sent before script window.close closes the window
#define DISPID_WINDOWSETLEFT 264 // sent when the put_left method is called on the WebOC
#define DISPID_WINDOWSETTOP 265 // sent when the put_top method is called on the WebOC
#define DISPID_WINDOWSETWIDTH 266 // sent when the put_width method is called on the WebOC
#define DISPID_WINDOWSETHEIGHT 267 // sent when the put_height method is called on the WebOC
#define DISPID_CLIENTTOHOSTWINDOW 268 // sent during window.open to request conversion of dimensions
#define DISPID_SETSECURELOCKICON 269 // sent to suggest the appropriate security icon to show
#define DISPID_FILEDOWNLOAD 270 // Fired to indicate the File Download dialog is opening
#define DISPID_NAVIGATEERROR 271 // Fired to indicate the a binding error has occured
#define DISPID_PRIVACYIMPACTEDSTATECHANGE 272 // Fired when the user's browsing experience is impacted
*/
BEGIN_EVENTSINK_MAP(CMFCIEView , CHtmlView)
ON_EVENT(CMFCIEView , AFX_IDW_PANE_FIRST, 102 /* StatusTextChange */, OnStatusTextChange, VTS_BSTR)
ON_EVENT(CMFCIEView , AFX_IDW_PANE_FIRST, 108 /* ProgressChange */, OnProgressChange, VTS_I4 VTS_I4)
ON_EVENT(CMFCIEView , AFX_IDW_PANE_FIRST, 105 /* CommandStateChange */, OnCommandStateChange, VTS_I4 VTS_BOOL)
ON_EVENT(CMFCIEView , AFX_IDW_PANE_FIRST, 106 /* DownloadBegin */, OnDownloadBegin, VTS_NONE)
ON_EVENT(CMFCIEView , AFX_IDW_PANE_FIRST, 104 /* DownloadComplete */, OnDownloadComplete, VTS_NONE)
ON_EVENT(CMFCIEView , AFX_IDW_PANE_FIRST, 113 /* TitleChange */, OnTitleChange, VTS_BSTR)
ON_EVENT(CMFCIEView , AFX_IDW_PANE_FIRST, 252 /* NavigateComplete2 */, NavigateComplete2, VTS_DISPATCH VTS_PVARIANT)
ON_EVENT(CMFCIEView , AFX_IDW_PANE_FIRST, 250 /* BeforeNavigate2 */, BeforeNavigate2, VTS_DISPATCH VTS_PVARIANT VTS_PVARIANT VTS_PVARIANT VTS_PVARIANT VTS_PVARIANT VTS_PBOOL)
ON_EVENT(CMFCIEView , AFX_IDW_PANE_FIRST, 112 /* PropertyChange */, OnPropertyChange, VTS_BSTR)
ON_EVENT(CMFCIEView , AFX_IDW_PANE_FIRST, 251 /* NewWindow2 */, OnNewWindow2, VTS_PDISPATCH VTS_PBOOL)
ON_EVENT(CMFCIEView , AFX_IDW_PANE_FIRST, 259 /* DocumentComplete */, DocumentComplete, VTS_DISPATCH VTS_PVARIANT)
ON_EVENT(CMFCIEView , AFX_IDW_PANE_FIRST, 253 /* OnQuit */, OnQuit, VTS_NONE)
ON_EVENT(CMFCIEView , AFX_IDW_PANE_FIRST, 254 /* OnVisible */, OnVisible, VTS_BOOL)
ON_EVENT(CMFCIEView , AFX_IDW_PANE_FIRST, 255 /* OnToolBar */, OnToolBar, VTS_BOOL)
ON_EVENT(CMFCIEView , AFX_IDW_PANE_FIRST, 256 /* OnMenuBar */, OnMenuBar, VTS_BOOL)
ON_EVENT(CMFCIEView , AFX_IDW_PANE_FIRST, 257 /* OnStatusBar */, OnStatusBar, VTS_BOOL)
ON_EVENT(CMFCIEView , AFX_IDW_PANE_FIRST, 258 /* OnFullScreen */, OnFullScreen, VTS_BOOL)
ON_EVENT(CMFCIEView , AFX_IDW_PANE_FIRST, 260 /* OnTheaterMode */, OnTheaterMode, VTS_BOOL)
ON_EVENT(CMFCIEView, AFX_IDW_PANE_FIRST, DISPID_WINDOWCLOSING, OnWindowClosing, VTS_BOOL VTS_PBOOL)
ON_EVENT(CMFCIEView, AFX_IDW_PANE_FIRST, DISPID_WINDOWCLOSING, OnWindowSetHeight, VTS_I4)
END_EVENTSINK_MAP()
...
void CHtmlView::OnProgressChange(long lProgress, long lProgressMax)
{
}
void CHtmlView::OnCommandStateChange(long lCommand, BOOL bEnable)
{
}
void CHtmlView::OnDownloadBegin()
{
}
void CHtmlView::OnDownloadComplete()
{
}
void CHtmlView::OnTitleChange(LPCTSTR lpszText)
{
}
void CHtmlView::OnPropertyChange(LPCTSTR lpszProperty)
{
}
void CHtmlView::OnNewWindow2(LPDISPATCH* ppDisp, BOOL* bCancel)
{
// default to continuing
bCancel = FALSE;
}
void CHtmlView::OnDocumentComplete(LPCTSTR lpszURL)
{
}
void CHtmlView::OnQuit()
{
}
void CHtmlView::OnVisible(BOOL bVisible)
{
}
void CHtmlView::OnToolBar(BOOL bToolBar)
{
}
void CHtmlView::OnMenuBar(BOOL bMenuBar)
{
}
void CHtmlView::OnStatusBar(BOOL bStatusBar)
{
}
void CHtmlView::OnFullScreen(BOOL bFullScreen)
{
}
void CMFCIEView::OnTheaterMode(BOOL bTheaterMode)
{
}
void CMFCIEView::OnNavigateComplete2(LPCTSTR lpszURL)
{
}
void CMFCIEView::OnBeforeNavigate2(LPCTSTR lpszURL, DWORD nFlags,
LPCTSTR lpszTargetFrameName, CByteArray& baPostData,
LPCTSTR lpszHeaders, BOOL* bCancel)
{
/*
// default to continuing
bCancel = FALSE;
*/
}
void CMFCIEView::OnStatusTextChange(LPCTSTR pszText)
{
// try to set the status bar text via the frame
/*
CFrameWnd* pFrame = GetParentFrame();
if (pFrame != NULL)
pFrame->SetMessageText(pszText); */
}
void CMFCIEView::OnWindowClosing(BOOL bIsChildWindow, BOOL *pbCancel)
{
}
void CMFCIEView::OnWindowSetHeight(long lHeight)
{
}
class CWebToolDlg : public CDialog
{
...
// Generated message map functions
//{{AFX_MSG(CWebToolDlg)
...
afx_msg void OnDestroy();
afx_msg void OnButtonGo();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
public:
afx_msg void DocumentComplete(IDispatch *pDisp,VARIANT *URL);
afx_msg void OnQuit();
DECLARE_DISPATCH_MAP();
private:
CComQIPtr<IWebBrowser2, &IID_IWebBrowser2> m_pWebBrowser2;
CComQIPtr<IConnectionPointContainer, &IID_IConnectionPointContainer> m_spCPC;
HRESULT Connect(void);
DWORD m_dwCookie;
};
CWebToolDlg::CWebToolDlg(CWnd* pParent /*=NULL*/)
: CDialog(CWebToolDlg::IDD, pParent)
{
...
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
EnableAutomation();
m_dwCookie = 0;
}
BEGIN_MESSAGE_MAP(CWebToolDlg, CDialog)
//{{AFX_MSG_MAP(CWebToolDlg)
...
ON_WM_DESTROY()
ON_BN_CLICKED(IDC_BUTTON_GO, OnButtonGo)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
BEGIN_DISPATCH_MAP(CWebToolDlg, CDialog)
DISP_FUNCTION_ID(CWebToolDlg, "OnQuit",DISPID_ONQUIT,OnQuit,VT_EMPTY, VTS_NONE)
DISP_FUNCTION_ID(CWebToolDlg, "DocumentComplete",DISPID_DOCUMENTCOMPLETE,DocumentComplete, VT_EMPTY, VTS_DISPATCH VTS_PVARIANT)
// DISP_FUNCTION_ID(CWebToolDlg, "WindowRegistered",0x000000c8,WindowRegistered,VT_EMPTY,VTS_I4)
//DISP_FUNCTION_ID(CWebToolDlg, "WindowRevoked",0x000000c9,WindowRevoked,VT_EMPTY,VTS_I4)
END_DISPATCH_MAP()
...
void CWebToolDlg::OnDestroy()
{
CDialog::OnDestroy();
// TODO: Add your message handler code here
if(m_pWebBrowser2)
{
m_pWebBrowser2->Quit();
m_pWebBrowser2=(LPUNKNOWN)NULL;
}
}
void CWebToolDlg::OnButtonGo()
{
UpdateData();
COleVariant varURL((LPCTSTR)m_strURL);
COleVariant varEmpty;
m_pWebBrowser2.CoCreateInstance(CLSID_InternetExplorer);
m_pWebBrowser2->put_Visible(VARIANT_TRUE);
m_pWebBrowser2->Navigate2( &varURL, &varEmpty, &varEmpty, &varEmpty, &varEmpty );
Connect();
}
void CWebToolDlg::OnQuit()
{
if(m_pWebBrowser2)
{
m_pWebBrowser2=(LPUNKNOWN)NULL;
}
}
void CWebToolDlg::DocumentComplete(IDispatch *pDisp,VARIANT *URL)
{
...
}
HRESULT CWebToolDlg::Connect()
{
HRESULT hr;
CComPtr<IConnectionPoint> spCP;
m_spCPC = m_pWebBrowser2;
hr = m_spCPC->FindConnectionPoint(DIID_DWebBrowserEvents2, &spCP);
if (FAILED(hr))
return hr;
hr = spCP->Advise( this->GetIDispatch(FALSE), &m_dwCookie);
return hr;
}
참조 사이트:
http://msdn.microsoft.com/en-us/library/aa752046(VS.85,printer).aspx
http://support.microsoft.com/default.aspx?scid=kb;EN-US;q184876
http://icary.tistory.com/tag/CDHtmlDialog