// ============================================================================= // Class Implementation : COXWebView // ============================================================================= // // This software along with its related components, documentation and files ("The Libraries") // is © 1994-2007 The Code Project (1612916 Ontario Limited) and use of The Libraries is // governed by a software license agreement ("Agreement"). Copies of the Agreement are // available at The Code Project (www.codeproject.com), as part of the package you downloaded // to obtain this file, or directly from our office. For a copy of the license governing // this software, you may contact us at legalaffairs@codeproject.com, or by calling 416-849-8900. // ///////////////////////////////////////////////////////////////////////////// #include "StdAfx.h" #include "OXWebView.h" #include "OXMainRes.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif #ifndef CSC_NAVIGATEBACK #define CSC_NAVIGATEBACK 2 #endif #ifndef CSC_NAVIGATEFORWARD #define CSC_NAVIGATEFORWARD 1 #endif // Edit control that adds item to combobox upon pressing enter. const int ECA_NO_DUPLICATES = 0x1; const int ECA_DEFAULT = ECA_NO_DUPLICATES; class OX_CLASS_DECL CEditComboboxAdder : public CEdit { public: CEditComboboxAdder(CWnd* pCB, int nFlags = ECA_DEFAULT, int nMaxEntries = 20); virtual BOOL PreTranslateMessage(MSG* pMsg); protected: virtual void PostNcDestroy() { delete this; } private: // Note: The control ID for the edit control of a combobox // is 1001. It seems quite unlikely that Microsoft // would ever change this, but if it happens, the // following anonymous enumeration will need updating. enum { IDC_COMBOBOX_EDIT = 1001 }; CComboBox* m_pCB; int m_nMaxEntries; int m_nFlags; }; CEditComboboxAdder::CEditComboboxAdder(CWnd* pCB, int nFlags, int nMaxEntries) : m_nFlags(nFlags), m_nMaxEntries(nMaxEntries) { UINT uiEdit = IDC_COMBOBOX_EDIT; m_pCB = (CComboBox*)pCB; ASSERT_VALID(pCB); VERIFY(SubclassDlgItem(uiEdit, pCB)); } BOOL CEditComboboxAdder::PreTranslateMessage(MSG* pMsg) { if (pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_RETURN) { CString s; GetWindowText(s); // If we are supposed to prevent duplicates, and the // given item exists, delete it. int nDupe; if ((m_nFlags & ECA_NO_DUPLICATES) && ((nDupe = m_pCB->FindStringExact(-1, s)) != CB_ERR)) { m_pCB->DeleteString(nDupe); } // Add the item to the top and select it. m_pCB->InsertString(0, s); m_pCB->SetCurSel(0); // If we have more than the maximum, trim the list. for (int n = m_pCB->GetCount(); n > m_nMaxEntries; n--) m_pCB->DeleteString(n - 1); // Fake the selection change notifcation. CWnd* pwndParent = m_pCB->GetParent(); if (pwndParent != NULL) { WPARAM w = MAKEWPARAM(m_pCB->GetDlgCtrlID(), CBN_SELCHANGE); LPARAM l = (LPARAM)m_pCB->GetSafeHwnd(); pwndParent->PostMessage(WM_COMMAND, w, l); } return TRUE; } return FALSE; } ///////////////////////////////////////////////////////////////////////////// // COXWebView ///////////////////////////////////////////////////////////////////////////// // Definition of static members // Data members ------------------------------------------------------------- // private: CFont* COXWebView::m_pfontToolbarURL; int COXWebView::m_nNumInstantiated; IMPLEMENT_DYNCREATE(COXWebView, CView) BEGIN_MESSAGE_MAP(COXWebView, CView) //{{AFX_MSG_MAP(COXWebView) ON_WM_CREATE() ON_WM_SIZE() ON_COMMAND(ID_OX_WEBVIEW_BACK, OnWebviewBack) ON_COMMAND(ID_OX_WEBVIEW_FORWARD, OnWebviewForward) ON_UPDATE_COMMAND_UI(ID_OX_WEBVIEW_BACK, OnUpdateWebviewBack) ON_UPDATE_COMMAND_UI(ID_OX_WEBVIEW_FORWARD, OnUpdateWebviewForward) ON_COMMAND(ID_OX_WEBVIEW_HOME, OnWebviewHome) ON_COMMAND(ID_OX_WEBVIEW_SEARCH, OnWebviewSearch) ON_UPDATE_COMMAND_UI(ID_OX_WEBVIEW_STOP, OnUpdateWebviewStop) ON_COMMAND(ID_OX_WEBVIEW_STOP, OnWebviewStop) ON_UPDATE_COMMAND_UI(ID_FILE_PRINT_PREVIEW, OnUpdateFilePrintPreview) ON_COMMAND(ID_FILE_PRINT, OnFilePrint) ON_UPDATE_COMMAND_UI(ID_OX_WEBVIEW_REFRESH, OnUpdateWebviewRefresh) ON_COMMAND(ID_OX_WEBVIEW_REFRESH, OnWebviewRefresh) //}}AFX_MSG_MAP // Standard printing commands ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint) ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint) ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview) ON_CBN_SELCHANGE(IDC_TOOLBAR_URL, OnToolbarURLChange) ON_NOTIFY_EX(TTN_NEEDTEXTA, 0, OnTooltipNeedText) ON_NOTIFY_EX(TTN_NEEDTEXTW, 0, OnTooltipNeedText) //ON_NOTIFY_EX_RANGE(TTN_NEEDTEXT, 0, 0xFFFFFFFF, OnTooltipNeedText) END_MESSAGE_MAP() BEGIN_EVENTSINK_MAP(COXWebView, CView) ON_EVENT(COXWebView, IDC_WEB_CTRL, 0x64, BeforeNavigate, VTS_BSTR VTS_I4 VTS_BSTR VTS_PVARIANT VTS_BSTR VTS_PVARIANT) ON_EVENT(COXWebView, IDC_WEB_CTRL, 0x65, NavigateComplete, VTS_BSTR) ON_EVENT(COXWebView, IDC_WEB_CTRL, 0x66, StatusTextChange, VTS_BSTR) ON_EVENT(COXWebView, IDC_WEB_CTRL, 0x67, Quit, VTS_PVARIANT) ON_EVENT(COXWebView, IDC_WEB_CTRL, 0x6a, DownloadBegin, VTS_NONE) ON_EVENT(COXWebView, IDC_WEB_CTRL, 0x6b, NewWindow, VTS_BSTR VTS_I4 VTS_BSTR VTS_PVARIANT VTS_BSTR VTS_PVARIANT) ON_EVENT(COXWebView, IDC_WEB_CTRL, 0x6c, ProgressChange, VTS_I4 VTS_I4) ON_EVENT(COXWebView, IDC_WEB_CTRL, 0x68, DownloadComplete, VTS_NONE) ON_EVENT(COXWebView, IDC_WEB_CTRL, 0x69, CommandStateChange, VTS_I4 VTS_BOOL) ON_EVENT(COXWebView, IDC_WEB_CTRL, 0x70, PropertyChange, VTS_BSTR) ON_EVENT(COXWebView, IDC_WEB_CTRL, 0x71, TitleChange, VTS_BSTR) ON_EVENT(COXWebView, IDC_WEB_CTRL, 0xc8, FrameBeforeNavigate, VTS_BSTR VTS_I4 VTS_BSTR VTS_PVARIANT VTS_BSTR VTS_PVARIANT) ON_EVENT(COXWebView, IDC_WEB_CTRL, 0xc9, FrameNavigateComplete, VTS_BSTR) ON_EVENT(COXWebView, IDC_WEB_CTRL, 0xcc, FrameNewWindow, VTS_BSTR VTS_I4 VTS_BSTR VTS_PVARIANT VTS_BSTR VTS_PVARIANT) END_EVENTSINK_MAP() ///////////////////////////////////////////////////////////////////////////// // COXWebView construction/destruction COXWebView::COXWebView() // --- In : // --- Out : // --- Returns : // --- Effect : Contructor of object // It will initialize the internal state : m_bCanGoBack(FALSE), m_bCanGoForward(FALSE), m_bCanRefresh(FALSE) { if (m_nNumInstantiated++ == 0) { CDC DC; DC.CreateCompatibleDC(NULL); LOGFONT lf; memset(&lf, 0, sizeof(lf)); _tcscpy(lf.lfFaceName, _T("MS Sans Serif")); const int POINTS_PER_INCH = 72; const int PPLIY = DC.GetDeviceCaps(LOGPIXELSY); lf.lfHeight = -MulDiv(8, PPLIY, POINTS_PER_INCH); m_pfontToolbarURL = new CFont; m_pfontToolbarURL->CreateFontIndirect(&lf); } } COXWebView::~COXWebView() { if (--m_nNumInstantiated == 0) { delete m_pfontToolbarURL; m_pfontToolbarURL = NULL; } } ///////////////////////////////////////////////////////////////////////////// // COXWebView drawing void COXWebView::OnDraw(CDC* /* pDC */) { // no implementation } ///////////////////////////////////////////////////////////////////////////// // COXWebView printing BOOL COXWebView::OnPreparePrinting(CPrintInfo* pInfo) { // default preparation return DoPreparePrinting(pInfo); } void COXWebView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/) { // TODO: add extra initialization before printing } void COXWebView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/) { // TODO: add cleanup after printing } ///////////////////////////////////////////////////////////////////////////// // COXWebView diagnostics #ifdef _DEBUG void COXWebView::AssertValid() const { CView::AssertValid(); } void COXWebView::Dump(CDumpContext& dc) const { CView::Dump(dc); } #endif //_DEBUG ///////////////////////////////////////////////////////////////////////////// // COXWebView message handlers int COXWebView::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CView::OnCreate(lpCreateStruct) == -1) return -1; // Fail if we cannot create the web control. if (!m_WebCtrl.Create(_T(""), WS_VISIBLE|WS_CHILD, CRect(0, 0, 0, 0), this, IDC_WEB_CTRL)) { TRACE0("COXWebView::OnCreate could not create web control\n"); return -1; } // The control ID specified in the create function does // not actually get used for the container ID; instead, // zero is used. Unfortunately, the RepositionBars method // will not actually resize the web control if the container // ID is zero. Thus, we set it to something else here. Also, // FYI, this cannot be done with SetDlgCtrlID--it sneakily // checks to see if the window in question is a client site // and changes the ID of the ActiveX control instead. The // more MFC does, the more it frustrates customizations. SetWindowLong(m_WebCtrl.GetSafeHwnd(), GWL_ID, 1); #ifdef _DEBUG // (Make sure OXWebViev.rc is included in your resource file) HINSTANCE hInst = AfxFindResourceHandle(MAKEINTRESOURCE(IDR_OX_WEBVIEW_BAR), RT_TOOLBAR); HRSRC hRsrc = ::FindResource(hInst, MAKEINTRESOURCE(IDR_OX_WEBVIEW_BAR), RT_TOOLBAR); ASSERT(hRsrc != NULL); #endif // Fail if we cannot create the toolbar. if (!m_Toolbar.Create(this) || !m_Toolbar.LoadToolBar(IDR_OX_WEBVIEW_BAR)) { TRACE0("COXWebView::OnCreate could not create toolbar\n"); return -1; } // Create the combobox on the toolbar. CRect rc; const int HEIGHT = 150; const int WIDTH = 200; CToolBarCtrl& t = m_Toolbar.GetToolBarCtrl(); int nNum = t.GetButtonCount(); t.GetItemRect(nNum - 1, &rc); CSize sizeOfs(rc.Width() / 2, rc.top); rc.top = sizeOfs.cy; rc.bottom = rc.top + HEIGHT; rc.left = rc.right + sizeOfs.cx; rc.right = rc.left + WIDTH; if (!m_cbxToolbarURL.Create(CBS_DROPDOWN|WS_VISIBLE|WS_TABSTOP|WS_VSCROLL, rc, &t, IDC_TOOLBAR_URL)) { TRACE0("COXWebView::OnCreate could not create toolbar URL combo-box\n"); return -1; } m_cbxToolbarURL.SetFont(m_pfontToolbarURL, FALSE); // Add combobox edit control handling for entering URLs. CEditComboboxAdder* pCbxEdit; pCbxEdit = new CEditComboboxAdder(&m_cbxToolbarURL); ASSERT(pCbxEdit != NULL); // Load up the tooltips for the toolbar. VERIFY(m_Tooltips.Create(&m_Toolbar)); for (int n = 0; n < nNum; n++) { TBBUTTON btn; t.GetButton(n, &btn); t.GetItemRect(n, &rc); m_Tooltips.AddTool(&t, LPSTR_TEXTCALLBACK, rc, btn.idCommand); } t.SetToolTips(&m_Tooltips); return 0; } void COXWebView::OnSize(UINT nType, int cx, int cy) { // First, make sure that the view window has finished // its own sizing. CView::OnSize(nType, cx, cy); UpdateWindow(); // Now, force an update of the toolbar, and resize the // combobox to take advantage of all available room. CRect rcTB, rc, rcLast; RepositionBars(AFX_IDW_TOOLBAR, AFX_IDW_TOOLBAR, 1); CToolBarCtrl& t = m_Toolbar.GetToolBarCtrl(); int nNum = t.GetButtonCount(); t.GetClientRect(&rcTB); m_cbxToolbarURL.GetWindowRect(&rc); t.ScreenToClient(&rc); t.GetItemRect(nNum - 1, &rcLast); const int HOFS = rcLast.Width() / 2; rc.left = rcLast.right + HOFS; rc.right = rcTB.right; // Make sure the combobox is at least four buttons wide. if (rc.Width() < HOFS * 8) rc.right = rc.left + HOFS * 8; m_cbxToolbarURL.MoveWindow(rc); } void COXWebView::OnUpdateWebviewBack(CCmdUI* pCmdUI) { pCmdUI->Enable(m_bCanGoBack); } void COXWebView::OnWebviewBack() { m_WebCtrl.GoBack(); } void COXWebView::OnUpdateWebviewForward(CCmdUI* pCmdUI) { pCmdUI->Enable(m_bCanGoForward); } void COXWebView::OnWebviewForward() { m_WebCtrl.GoForward(); } void COXWebView::OnWebviewHome() { m_WebCtrl.GoHome(); } void COXWebView::OnWebviewSearch() { m_WebCtrl.GoSearch(); } void COXWebView::OnUpdateWebviewStop(CCmdUI* pCmdUI) { pCmdUI->Enable(m_WebCtrl.GetBusy()); } void COXWebView::OnWebviewStop() { m_WebCtrl.Stop(); } void COXWebView::OnUpdateWebviewRefresh(CCmdUI* pCmdUI) { pCmdUI->Enable(m_bCanRefresh); } void COXWebView::OnWebviewRefresh() { m_WebCtrl.Refresh(); } void COXWebView::OnToolbarURLChange() { int nSel = m_cbxToolbarURL.GetCurSel(); if (nSel != CB_ERR) { CString s; m_cbxToolbarURL.GetLBText(nSel, s); m_WebCtrl.Navigate(s, NULL, NULL, NULL, NULL); } } BOOL COXWebView::OnTooltipNeedText(UINT /* id */, NMHDR* pNMHDR, LRESULT* pResult) { // need to handle both ANSI and UNICODE versions of the message TOOLTIPTEXTA* pTTTA = (TOOLTIPTEXTA*)pNMHDR; TOOLTIPTEXTW* pTTTW = (TOOLTIPTEXTW*)pNMHDR; CString strTipText; UINT nID = pNMHDR->idFrom; if (pNMHDR->code == TTN_NEEDTEXTA && (pTTTA->uFlags & TTF_IDISHWND) || pNMHDR->code == TTN_NEEDTEXTW && (pTTTW->uFlags & TTF_IDISHWND)) { // idFrom is actually the HWND of the tool nID = ((UINT)(WORD)::GetDlgCtrlID((HWND)nID)); } if (nID != 0) // will be zero on a separator { strTipText.LoadString(nID); int nNewLine = strTipText.Find('\n'); if (nNewLine != -1) strTipText = strTipText.Mid(nNewLine + 1); } #ifndef _UNICODE if (pNMHDR->code == TTN_NEEDTEXTA) lstrcpyn(pTTTA->szText, strTipText, (sizeof(pTTTA->szText)/sizeof(pTTTA->szText[0]))); else _mbstowcsz(pTTTW->szText, strTipText, (sizeof(pTTTW->szText)/sizeof(pTTTW->szText[0]))); #else if (pNMHDR->code == TTN_NEEDTEXTA) _wcstombsz(pTTTA->szText, strTipText, (sizeof(pTTTA->szText)/sizeof(pTTTA->szText[0]))); else lstrcpyn(pTTTW->szText, strTipText, (sizeof(pTTTW->szText)/sizeof(pTTTW->szText[0]))); #endif *pResult = 0; // bring the tooltip window above other popup windows ::SetWindowPos(pNMHDR->hwndFrom, HWND_TOP, 0, 0, 0, 0, SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE); return TRUE; // message was handled } void COXWebView::OnUpdateFilePrintPreview(CCmdUI* pCmdUI) { pCmdUI->Enable(FALSE); } void COXWebView::OnFilePrint() { m_WebCtrl.Print(); } ///////////////////////////////////////////////////////////////////////////// // Web control notification handlers. void COXWebView::BeforeNavigate(LPCTSTR /* pcszURL */, long /* lFlags */, LPCTSTR /* pcszTargetFrameName */, VARIANT* /* PostData */, LPCTSTR /* pcszHeaders */, VARIANT_BOOL* /* pbCancel */) // --- In : pcszURL : The URL to which the view is about to navigate. // lFlags : (reserved for Microsoft's future use) // pcszTargetFrameName : String that contains the name of // the frame in which to display the // resource, or NULL if no named frame // is targeted for the resource. // PostData : Address of data to send to the server if the // HTTP POST transaction is being used. // pcszHeaders : Additional HTTP headers to send to the server // (HTTP URLs only). The headers can specify // such things as the action required of the // server, the type of data being passed to the // server, or a status code. // --- Out : pbCancel : Address of cancel flag. An application can set // this parameter to TRUE to cancel the navigation // operation, or FALSE to allow it to proceed. // --- Returns : // --- Effect : This method is called prior to a navigation operation. { //TRACE1("COXWebView::BeforeNavigate %s\n", pcszURL); } void COXWebView::NavigateComplete(LPCTSTR /* pcszURL */) // --- In : pcszURL : The URL to which the view is now positioned. // --- Out : // --- Returns : // --- Effect : This method is called after a navigation operation // is completed. { m_bCanRefresh = TRUE; CString s = m_WebCtrl.GetLocationURL(); m_cbxToolbarURL.SetWindowText(s); //TRACE1("COXWebView::NavigateComplete %s\n", pcszURL); } void COXWebView::StatusTextChange(LPCTSTR /* pcszText */) // --- In : pcszText : The message describing an event that // has occurred. // --- Out : // --- Returns : // --- Effect : This method is called when something has happened of // which the application might want to inform the user. { //TRACE1("COXWebView::StatusTextChange %s\n", pcszText); } void COXWebView::Quit(VARIANT_BOOL* /* pbCancel */) // --- In : // --- Out : pbCancel : Address of the cancel flag. An application // can set this parameter to TRUE to cancel the // quit operation, or FALSE to allow it to // continue. // --- Returns : // --- Effect : This method is called when the Internet Explorer // application is ready to quit. { //TRACE0("COXWebView::Quit\n"); } void COXWebView::DownloadBegin() // --- In : // --- Out : // --- Returns : // --- Effect : Notifies an application that a navigation operation // is beginning. This event is fired shortly after the // BeforeNavigate event, unless the navigation is cancelled. { //TRACE0("COXWebView::DownloadBegin\n"); } void COXWebView::NewWindow(LPCTSTR /* pcszURL */, long /* lFlags */, LPCTSTR /* pcszTargetFrameName */, VARIANT* /* PostData */, LPCTSTR /* pcszHeaders */, VARIANT_BOOL* /* pbCancel */) // --- In : pcszURL : The URL to which the view is about to navigate. // lFlags : (reserved for Microsoft's future use) // pcszTargetFrameName : String that contains the name of // the frame in which to display the // resource, or NULL if no named frame // is targeted for the resource. // PostData : Address of data to send to the server if the // HTTP POST transaction is being used. // pcszHeaders : Additional HTTP headers to send to the server // (HTTP URLs only). The headers can specify // such things as the action required of the // server, the type of data being passed to the // server, or a status code. // --- Out : pbCancel : Address of cancel flag. An application can set // this parameter to TRUE to cancel the navigation // operation, or FALSE to allow it to proceed. // --- Returns : // --- Effect : Notifies an application that a new window is to be // created for displaying a resource. { //TRACE1("COXWebView::NewWindow %s\n", pcszURL); } void COXWebView::ProgressChange(long /* lProgress */, long /* lProgressMax */) // --- In : lProgress : Amount of total progress to show, // or -1 when progress is complete. // lProgressMax : Maximum progress value. // --- Out : // --- Returns : // --- Effect : Notifies an application that the progress of a // download operation has been updated. { //TRACE2("COXWebView::ProgressChange %i of %i\n", lProgress, lProgressMax); } void COXWebView::DownloadComplete() // --- In : // --- Out : // --- Returns : // --- Effect : Occurs when a navigation operation finished, was halted, // or failed. Unlike NavigateComplete which is only fired // when a URL is successfully navigated to, this event // is always fired after a navigation starts. Any animation // or "busy" indication that the container needs to display // should be connected to this event. { //TRACE0("COXWebView::DownloadComplete\n"); } void COXWebView::CommandStateChange(long lCmdID, BOOL bEnabled) // --- In : lCmdID : Identifier of the command whose enable state // has changed. // bEnabled : This parameter is TRUE if the command is // enabled, or FALSE if it is disabled. // --- Out : // --- Returns : // --- Effect : Notifies an application that the enabled state of a Web // browser command has changed. { switch (lCmdID) { case CSC_NAVIGATEBACK: m_bCanGoBack = bEnabled; break; case CSC_NAVIGATEFORWARD: m_bCanGoForward = bEnabled; break; } // TRACE(_T("COXWebView::CommandStateChange 0x%X %i\n"), lCmdID, bEnabled); } void COXWebView::PropertyChange(LPCTSTR /* pcszProperty */) // --- In : pcszProperty : The name of the property that has changed. // --- Out : // --- Returns : // --- Effect : Notifies an application that the IWebBrowser::PutProperty // function has changed the value of a property. { // TRACE1("COXWebView::PropertyChange %s\n", pcszProperty); } void COXWebView::TitleChange(LPCTSTR /* pcszTitle */) // --- In : pcszTitle : Caller allocated buffer that contains the // new document title. // --- Out : // --- Returns : // --- Effect : Notifies an application that the title of a document // in the Web browser control becomes available or changes. // For HTML, the title may change; while HTML is still // downloading, the URL of the document is set as the title. // After the real title (if there is one) is parsed from the // HTML, the title is changed to reflect the actual title. { // TRACE1("COXWebView::TitleChange %s\n", pcszTitle); } void COXWebView::FrameBeforeNavigate(LPCTSTR /* pcszURL */, long /* lFlags */, LPCTSTR /* pcszTargetFrameName */, VARIANT* /* PostData */, LPCTSTR /* pcszHeaders */, VARIANT_BOOL* /* pbCancel */) // --- In : pcszURL : The URL to which the view is about to navigate. // lFlags : (reserved for Microsoft's future use) // pcszTargetFrameName : String that contains the name of // the frame in which to display the // resource, or NULL if no named frame // is targeted for the resource. // PostData : Address of data to send to the server if the // HTTP POST transaction is being used. // pcszHeaders : Additional HTTP headers to send to the server // (HTTP URLs only). The headers can specify // such things as the action required of the // server, the type of data being passed to the // server, or a status code. // --- Out : pbCancel : Address of cancel flag. An application can set // this parameter to TRUE to cancel the navigation // operation, or FALSE to allow it to proceed. // --- Returns : // --- Effect : Notifies an application that Web browser control is // about to navigate to a different URL, which may happen // as a result of external automation, internal automation // from a script, or the user clicking a link or typing in // the address bar. The container has an opportunity to // cancel the pending navigation. This event is fired for // navigations that occur inside an HTML frame. { // TRACE1("COXWebView::FrameBeforeNavigate %s\n", pcszURL); } void COXWebView::FrameNavigateComplete(LPCTSTR /* pcszURL */) // --- In : pcszURL : URL to be navigated to. Note that this URL can be // different from the URL that the browser was told // to navigate to. // --- Out : // --- Returns : // --- Effect : Notifies an application that the browser has successfully // navigated to a new location. The document may still be // downloading (and in the case of HTML, images may still be // downloading), but at least part of the document has been // received from the server and the viewer for the document // has been created. This event is fired for navigations // that occur inside an HTML frame. { // TRACE1("COXWebView::FrameNavigateComplete %s\n", pcszURL); } void COXWebView::FrameNewWindow(LPCTSTR /* pcszURL */, long /* lFlags */, LPCTSTR /* pcszTargetFrameName */, VARIANT* /* PostData */, LPCTSTR /* pcszHeaders */, VARIANT_BOOL* /* pbCancel */) // --- In : pcszURL : The URL to which the view is about to navigate. // lFlags : (reserved for Microsoft's future use) // pcszTargetFrameName : String that contains the name of // the frame in which to display the // resource, or NULL if no named frame // is targeted for the resource. // PostData : Address of data to send to the server if the // HTTP POST transaction is being used. // pcszHeaders : Additional HTTP headers to send to the server // (HTTP URLs only). The headers can specify // such things as the action required of the // server, the type of data being passed to the // server, or a status code. // --- Out : pbCancel : Address of cancel flag. An application can set // this parameter to TRUE to cancel the navigation // operation, or FALSE to allow it to proceed. // --- Returns : // --- Effect : Notifies an application that a new window is to be // created for displaying a resource. { // TRACE1("COXWebView::FrameNewWindow %s\n", pcszURL); }