--- /dev/null
+////////////////////////////////////////////////////\r
+// Mainfrm.cpp\r
+\r
+#include "stdafx.h"\r
+#include "resource.h"\r
+#include "mainfrm.h"\r
+#include <shlobj.h>\r
+#include <sstream>\r
+\r
+\r
+// Definitions for the CMainFrame class\r
+CMainFrame::CMainFrame()\r
+{\r
+ //Set m_View as the view window of the frame\r
+ SetView(m_View);\r
+\r
+ // Set CMainFrame as our event sink\r
+ m_EventSink.SetSink(this);\r
+\r
+ // Set the registry key name, and load the initial window position\r
+ // Use a registry key name like "CompanyName\\Application"\r
+ LoadRegistrySettings(_T("Win32++\\Browser Sample"));\r
+}\r
+\r
+CMainFrame::~CMainFrame()\r
+{\r
+ // Destructor for CMainFrame.\r
+}\r
+\r
+void CMainFrame::AddComboBoxBand(int Listbox_Height)\r
+{\r
+ // Get the reference to the rebar object\r
+ CReBar& RB = GetReBar();\r
+ ReBarTheme RBTheme = RB.GetReBarTheme();\r
+\r
+ // Create the ComboboxEx window\r
+ m_ComboboxEx.Create(&GetReBar());\r
+\r
+ // Put the window in a new rebar band\r
+ REBARBANDINFO rbbi = {0};\r
+ rbbi.cbSize = sizeof(REBARBANDINFO);\r
+ rbbi.fMask = RBBIM_COLORS | RBBIM_CHILDSIZE | RBBIM_STYLE | RBBIM_CHILD | RBBIM_TEXT;\r
+ rbbi.cyMinChild = Listbox_Height;\r
+ rbbi.cyMaxChild = Listbox_Height;\r
+ rbbi.cxMinChild = 200;\r
+ rbbi.fStyle = RBBS_BREAK | RBBS_VARIABLEHEIGHT | RBBS_GRIPPERALWAYS;\r
+ rbbi.clrFore = GetSysColor(COLOR_BTNTEXT);\r
+ rbbi.clrBack = RBTheme.clrBand1;\r
+ rbbi.hwndChild = m_ComboboxEx.GetHwnd();\r
+ rbbi.lpText = (LPTSTR)_T("Address");\r
+\r
+ RB.InsertBand(-1, rbbi);\r
+}\r
+\r
+void CMainFrame::ConnectEvents()\r
+{\r
+ IUnknown* pUnk = GetBrowser().GetAXWindow().GetUnknown();\r
+ if(!pUnk)\r
+ return;\r
+\r
+ IConnectionPoint* pcp;\r
+ pcp = GetConnectionPoint(DIID_DWebBrowserEvents2);\r
+ if(!pcp)\r
+ return;\r
+\r
+ pcp->Advise(&m_EventSink, &m_eventCookie);\r
+ pcp->Release();\r
+ pUnk->Release();\r
+}\r
+\r
+IConnectionPoint* CMainFrame::GetConnectionPoint(REFIID riid)\r
+{\r
+ IUnknown *pUnk = GetBrowser().GetAXWindow().GetUnknown();\r
+ if(!pUnk)\r
+ return NULL;\r
+\r
+ IConnectionPointContainer* pcpc;\r
+ IConnectionPoint* pcp = NULL;\r
+\r
+ HRESULT hr = pUnk->QueryInterface(IID_IConnectionPointContainer, (void**)&pcpc);\r
+ if(SUCCEEDED(hr))\r
+ {\r
+ pcpc->FindConnectionPoint(riid, &pcp);\r
+ pcpc->Release();\r
+ }\r
+\r
+ pUnk->Release();\r
+\r
+ return pcp;\r
+}\r
+\r
+void CMainFrame::OnBeforeNavigate2(DISPPARAMS* pDispParams)\r
+{\r
+ UNREFERENCED_PARAMETER(pDispParams);\r
+}\r
+\r
+void CMainFrame::OnCommandStateChange(DISPPARAMS* pDispParams)\r
+{\r
+ CToolBar& TB = GetToolBar();\r
+\r
+ if (GetToolBar().IsWindow())\r
+ {\r
+ if ((pDispParams) && (pDispParams->cArgs == 2))\r
+ {\r
+ if (pDispParams->rgvarg[1].vt == (VT_I4) && pDispParams->rgvarg[0].vt == (VT_BOOL))\r
+ {\r
+ VARIANT_BOOL bEnable = pDispParams->rgvarg[0].boolVal;\r
+ int nCommand = pDispParams->rgvarg[1].intVal;\r
+ {\r
+ switch (nCommand)\r
+ {\r
+ case 1: // Navigate forward:\r
+ bEnable ? TB.EnableButton(IDM_FORWARD) : TB.DisableButton(IDM_FORWARD);\r
+\r
+ break;\r
+ case 2: // Navigate back:\r
+ bEnable ? TB.EnableButton(IDM_BACK) : TB.DisableButton(IDM_BACK);\r
+ break;\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+}\r
+\r
+BOOL CMainFrame::OnCommand(WPARAM wParam, LPARAM lParam)\r
+{\r
+ // Respond to menu and and toolbar input\r
+\r
+ CEdit* pEdit = m_ComboboxEx.GetEditCtrl();\r
+\r
+ switch(LOWORD(wParam))\r
+ {\r
+ case IDM_FILE_EXIT:\r
+ // End the application\r
+ PostMessage(WM_CLOSE, 0, 0);\r
+ return TRUE;\r
+ case IDM_HELP_ABOUT:\r
+ // Display the help dialog\r
+ OnHelp();\r
+ return TRUE;\r
+ case IDM_BACK:\r
+ m_View.GoBack();\r
+ return TRUE;\r
+ case IDM_FORWARD:\r
+ m_View.GoForward();\r
+ return TRUE;\r
+ case IDM_REFRESH:\r
+ m_View.Refresh();\r
+ return TRUE;\r
+ case IDM_STOP:\r
+ m_View.Stop();\r
+ return TRUE;\r
+ case IDM_HOME:\r
+ m_View.GoHome();\r
+ return TRUE;\r
+ case IDM_EDIT_CUT:\r
+ if (GetFocus() == pEdit)\r
+ pEdit->Cut();\r
+ else\r
+ m_View.ExecWB( OLECMDID_CUT, OLECMDEXECOPT_DODEFAULT, NULL, NULL );\r
+ return TRUE;\r
+ case IDM_EDIT_COPY:\r
+ if (GetFocus() == pEdit)\r
+ pEdit->Copy();\r
+ else\r
+ m_View.ExecWB( OLECMDID_COPY, OLECMDEXECOPT_DODEFAULT, NULL, NULL );\r
+ return TRUE;\r
+ case IDM_EDIT_PASTE:\r
+ if (GetFocus() == pEdit)\r
+ pEdit->Paste();\r
+ else\r
+ m_View.ExecWB( OLECMDID_PASTE, OLECMDEXECOPT_DODEFAULT, NULL, NULL );\r
+ return TRUE;\r
+ case IDM_EDIT_DELETE:\r
+ if (GetFocus() == pEdit)\r
+ pEdit->Clear();\r
+#if !defined(__GNUC__)\r
+ else\r
+ m_View.ExecWB( OLECMDID_DELETE, OLECMDEXECOPT_DODEFAULT, NULL, NULL );\r
+#endif\r
+ return TRUE;\r
+ case IDW_VIEW_STATUSBAR:\r
+ OnViewStatusBar();\r
+ return TRUE;\r
+ case IDW_VIEW_TOOLBAR:\r
+ OnViewToolBar();\r
+ return TRUE;\r
+ }\r
+\r
+ // Handle notification WM_COMMAND from ComboboxEx\r
+ if((HWND)lParam == m_ComboboxEx.GetHwnd())\r
+ {\r
+ switch(HIWORD(wParam))\r
+ {\r
+ case CBN_SELCHANGE:\r
+ // User made selection from list\r
+ {\r
+ // Get text from edit box\r
+ CString str = m_ComboboxEx.GetWindowText();\r
+\r
+ // Navigate to web page\r
+ m_View.Navigate(str);\r
+ }\r
+ return TRUE;\r
+ }\r
+ }\r
+\r
+ return FALSE;\r
+}\r
+\r
+void CMainFrame::OnDocumentBegin(DISPPARAMS* pDispParams)\r
+{\r
+ UNREFERENCED_PARAMETER(pDispParams);\r
+ TRACE(_T("OnDocumentBegin\n"));\r
+}\r
+\r
+void CMainFrame::OnCreate()\r
+{\r
+ // Call the base function first\r
+ CFrame::OnCreate();\r
+\r
+ ConnectEvents();\r
+}\r
+\r
+void CMainFrame::OnDocumentComplete(DISPPARAMS* pDispParams)\r
+{\r
+ UNREFERENCED_PARAMETER(pDispParams);\r
+ GetStatusBar().SetPartText(0, _T("Done"));\r
+}\r
+\r
+void CMainFrame::OnDownloadBegin(DISPPARAMS* pDispParams)\r
+{\r
+ UNREFERENCED_PARAMETER(pDispParams);\r
+}\r
+\r
+void CMainFrame::OnDownloadComplete(DISPPARAMS* pDispParams)\r
+{\r
+ UNREFERENCED_PARAMETER(pDispParams);\r
+}\r
+\r
+void CMainFrame::OnInitialUpdate()\r
+{\r
+ // The frame is now created.\r
+ // Place any additional startup code here.\r
+\r
+ m_View.GoHome();\r
+}\r
+\r
+void CMainFrame::OnNavigateComplete2(DISPPARAMS* pDispParams)\r
+{\r
+ CString str = _T("NavigateComplete2: ");\r
+\r
+ if (pDispParams->rgvarg[0].vt == (VT_BYREF|VT_VARIANT))\r
+ {\r
+ VARIANT vtURL;\r
+ vtURL = *pDispParams->rgvarg[0].pvarVal;\r
+ vtURL.vt = VT_BSTR;\r
+\r
+ str += vtURL.bstrVal;\r
+ TRACE(str);\r
+ VariantClear(&vtURL);\r
+ }\r
+\r
+ BSTR bstrUrlName;\r
+\r
+ HRESULT hr = GetBrowser().GetIWebBrowser2()->get_LocationURL(&bstrUrlName);\r
+ if (FAILED(hr))\r
+ return;\r
+\r
+ // Update the URL in the ComboboxEx edit box.\r
+ m_ComboboxEx.SetWindowText(W2T(bstrUrlName));\r
+ m_View.SetFocus();\r
+}\r
+\r
+void CMainFrame::OnNewWindow2(DISPPARAMS* pDispParams)\r
+{\r
+ UNREFERENCED_PARAMETER(pDispParams);\r
+ TRACE(_T("NewWindow2\n"));\r
+}\r
+\r
+LRESULT CMainFrame::OnNotify(WPARAM wParam, LPARAM lParam)\r
+{\r
+ switch (((LPNMHDR)lParam)->code)\r
+ {\r
+ case CBEN_ENDEDIT:\r
+ {\r
+ switch (((PNMCBEENDEDIT)lParam)->iWhy)\r
+ {\r
+ case CBENF_RETURN:\r
+ // User hit return in edit box\r
+ {\r
+ // Get text from edit box\r
+ CString str = m_ComboboxEx.GetWindowText();\r
+\r
+ // Insert text into the list box.\r
+ COMBOBOXEXITEM CBXitem = {0};\r
+ CBXitem.mask = CBEIF_TEXT;\r
+ CBXitem.pszText = (LPTSTR)str.c_str();\r
+ m_ComboboxEx.InsertItem(&CBXitem);\r
+\r
+ // Navigate to the web page\r
+ m_View.Navigate(str);\r
+ return FALSE;\r
+ }\r
+ }\r
+ }\r
+ }\r
+\r
+ return CFrame::OnNotify(wParam, lParam);\r
+}\r
+\r
+void CMainFrame::OnProgressChange(DISPPARAMS* pDispParams)\r
+{\r
+ CString str;\r
+\r
+ if (pDispParams->cArgs != 0)\r
+ {\r
+ if (pDispParams->cArgs > 1 && pDispParams->rgvarg[1].vt == VT_I4)\r
+ {\r
+ str.Format(_T("Progress = %d"), pDispParams->rgvarg[1].lVal);\r
+ }\r
+\r
+ if (pDispParams->rgvarg[0].vt == VT_I4)\r
+ {\r
+ CString str2;\r
+ str2.Format(_T(", ProgressMax = %d\n"), pDispParams->rgvarg[0].lVal);\r
+ str = str + str2;\r
+ }\r
+\r
+ TRACE(str);\r
+ }\r
+}\r
+\r
+void CMainFrame::OnPropertyChange(DISPPARAMS* pDispParams)\r
+{\r
+ CString str;\r
+ if (pDispParams->cArgs > 0 && pDispParams->rgvarg[0].vt == VT_BSTR)\r
+ str.Format(_T("Property Change: %s\n"), (LPCTSTR)W2T(pDispParams->rgvarg[0].bstrVal));\r
+\r
+ TRACE(str);\r
+}\r
+\r
+void CMainFrame::OnStatusTextChange(DISPPARAMS* pDispParams)\r
+{\r
+ LPOLESTR lpStatusText = pDispParams->rgvarg->bstrVal;\r
+\r
+ if (GetStatusBar().IsWindow() && lpStatusText)\r
+ {\r
+ if (lstrcmp(W2T(lpStatusText), _T("")))\r
+ {\r
+ GetStatusBar().SetPartText(0, W2T(lpStatusText));\r
+ }\r
+ else\r
+ GetStatusBar().SetPartText(0, _T("Done"));\r
+ }\r
+}\r
+\r
+void CMainFrame::OnTitleChange(DISPPARAMS* pDispParams)\r
+{\r
+ TRACE(_T("TitleChange: \n"));\r
+ CString str;\r
+\r
+ if (pDispParams->cArgs > 0 && pDispParams->rgvarg[0].vt == VT_BSTR)\r
+ {\r
+ str = CString(pDispParams->rgvarg[0].bstrVal) + _T(" - ") + LoadString(IDW_MAIN);\r
+ TRACE(W2T(pDispParams->rgvarg[0].bstrVal));\r
+ }\r
+ else\r
+ str = LoadString(IDW_MAIN);\r
+\r
+ SetWindowText(str);\r
+}\r
+\r
+void CMainFrame::SetupToolBar()\r
+{\r
+ // Set the Resource IDs for the toolbar buttons\r
+ AddToolBarButton( IDM_BACK );\r
+ AddToolBarButton( IDM_FORWARD );\r
+ AddToolBarButton( 0 ); // Separator\r
+ AddToolBarButton( IDM_REFRESH );\r
+ AddToolBarButton( IDM_STOP );\r
+ AddToolBarButton( 0 ); // Separator\r
+ AddToolBarButton( IDM_HOME );\r
+\r
+ // Set the image lists for normal, hot and disabled buttons\r
+ int BitsPerPixel = GetDesktopWindow()->GetDC()->GetDeviceCaps(BITSPIXEL);\r
+ if (GetWinVersion() >= 2501 && LoadBitmap(MAKEINTRESOURCE(IDB_TOOLBAR32_NORM)) && BitsPerPixel == 32)\r
+ {\r
+ // Use 32bit bitmaps for XP and above (support for 32bit bitmaps began with XP)\r
+ SetToolBarImages(RGB(0,0,0), IDB_TOOLBAR32_NORM, IDB_TOOLBAR32_HOT, IDB_TOOLBAR32_DIS);\r
+ }\r
+ else\r
+ {\r
+ // Use 24bit bitmaps for Win2000 and below\r
+ SetToolBarImages(RGB(255,0,255), IDB_TOOLBAR24_NORM, IDB_TOOLBAR24_HOT, IDB_TOOLBAR24_DIS);\r
+ }\r
+\r
+ std::vector<UINT> IconData;\r
+ if (IsReBarUsed())\r
+ {\r
+ int Height = 22;\r
+ AddComboBoxBand(Height);\r
+\r
+ // Set the icons for popup menu items\r
+ IconData.push_back ( IDM_FILE_NEW );\r
+ IconData.push_back ( IDM_FILE_OPEN );\r
+ IconData.push_back ( IDM_FILE_SAVE );\r
+ IconData.push_back ( IDM_EDIT_CUT );\r
+ IconData.push_back ( IDM_EDIT_COPY );\r
+ IconData.push_back ( IDM_EDIT_PASTE);\r
+ IconData.push_back ( IDM_FILE_PRINT);\r
+ IconData.push_back ( IDM_HELP_ABOUT);\r
+ }\r
+\r
+ AddMenuIcons(IconData, RGB(192, 192, 192), IDW_MAIN, 0);\r
+}\r
+\r
+LRESULT CMainFrame::WndProc(UINT uMsg, WPARAM wParam, LPARAM lParam)\r
+{\r
+// switch (uMsg)\r
+// {\r
+ //Additional messages to be handled go here\r
+// }\r
+\r
+ // pass unhandled messages on for default processing\r
+ return WndProcDefault(uMsg, wParam, lParam);\r
+}\r
+\r