1 ////////////////////////////////////////////////////
\r
5 #include "resource.h"
\r
11 // Definitions for the CMainFrame class
\r
12 CMainFrame::CMainFrame()
\r
14 //Set m_View as the view window of the frame
\r
17 // Set CMainFrame as our event sink
\r
18 m_EventSink.SetSink(this);
\r
20 // Set the registry key name, and load the initial window position
\r
21 // Use a registry key name like "CompanyName\\Application"
\r
22 LoadRegistrySettings(_T("Win32++\\Browser Sample"));
\r
25 CMainFrame::~CMainFrame()
\r
27 // Destructor for CMainFrame.
\r
30 void CMainFrame::AddComboBoxBand(int Listbox_Height)
\r
32 // Get the reference to the rebar object
\r
33 CReBar& RB = GetReBar();
\r
34 ReBarTheme RBTheme = RB.GetReBarTheme();
\r
36 // Create the ComboboxEx window
\r
37 m_ComboboxEx.Create(&GetReBar());
\r
39 // Put the window in a new rebar band
\r
40 REBARBANDINFO rbbi = {0};
\r
41 rbbi.cbSize = sizeof(REBARBANDINFO);
\r
42 rbbi.fMask = RBBIM_COLORS | RBBIM_CHILDSIZE | RBBIM_STYLE | RBBIM_CHILD | RBBIM_TEXT;
\r
43 rbbi.cyMinChild = Listbox_Height;
\r
44 rbbi.cyMaxChild = Listbox_Height;
\r
45 rbbi.cxMinChild = 200;
\r
46 rbbi.fStyle = RBBS_BREAK | RBBS_VARIABLEHEIGHT | RBBS_GRIPPERALWAYS;
\r
47 rbbi.clrFore = GetSysColor(COLOR_BTNTEXT);
\r
48 rbbi.clrBack = RBTheme.clrBand1;
\r
49 rbbi.hwndChild = m_ComboboxEx.GetHwnd();
\r
50 rbbi.lpText = (LPTSTR)_T("Address");
\r
52 RB.InsertBand(-1, rbbi);
\r
55 void CMainFrame::ConnectEvents()
\r
57 IUnknown* pUnk = GetBrowser().GetAXWindow().GetUnknown();
\r
61 IConnectionPoint* pcp;
\r
62 pcp = GetConnectionPoint(DIID_DWebBrowserEvents2);
\r
66 pcp->Advise(&m_EventSink, &m_eventCookie);
\r
71 IConnectionPoint* CMainFrame::GetConnectionPoint(REFIID riid)
\r
73 IUnknown *pUnk = GetBrowser().GetAXWindow().GetUnknown();
\r
77 IConnectionPointContainer* pcpc;
\r
78 IConnectionPoint* pcp = NULL;
\r
80 HRESULT hr = pUnk->QueryInterface(IID_IConnectionPointContainer, (void**)&pcpc);
\r
83 pcpc->FindConnectionPoint(riid, &pcp);
\r
92 void CMainFrame::OnBeforeNavigate2(DISPPARAMS* pDispParams)
\r
94 UNREFERENCED_PARAMETER(pDispParams);
\r
97 void CMainFrame::OnCommandStateChange(DISPPARAMS* pDispParams)
\r
99 CToolBar& TB = GetToolBar();
\r
101 if (GetToolBar().IsWindow())
\r
103 if ((pDispParams) && (pDispParams->cArgs == 2))
\r
105 if (pDispParams->rgvarg[1].vt == (VT_I4) && pDispParams->rgvarg[0].vt == (VT_BOOL))
\r
107 VARIANT_BOOL bEnable = pDispParams->rgvarg[0].boolVal;
\r
108 int nCommand = pDispParams->rgvarg[1].intVal;
\r
112 case 1: // Navigate forward:
\r
113 bEnable ? TB.EnableButton(IDM_FORWARD) : TB.DisableButton(IDM_FORWARD);
\r
116 case 2: // Navigate back:
\r
117 bEnable ? TB.EnableButton(IDM_BACK) : TB.DisableButton(IDM_BACK);
\r
126 BOOL CMainFrame::OnCommand(WPARAM wParam, LPARAM lParam)
\r
128 // Respond to menu and and toolbar input
\r
130 CEdit* pEdit = m_ComboboxEx.GetEditCtrl();
\r
132 switch(LOWORD(wParam))
\r
134 case IDM_FILE_EXIT:
\r
135 // End the application
\r
136 PostMessage(WM_CLOSE, 0, 0);
\r
138 case IDM_HELP_ABOUT:
\r
139 // Display the help dialog
\r
146 m_View.GoForward();
\r
158 if (GetFocus() == pEdit)
\r
161 m_View.ExecWB( OLECMDID_CUT, OLECMDEXECOPT_DODEFAULT, NULL, NULL );
\r
163 case IDM_EDIT_COPY:
\r
164 if (GetFocus() == pEdit)
\r
167 m_View.ExecWB( OLECMDID_COPY, OLECMDEXECOPT_DODEFAULT, NULL, NULL );
\r
169 case IDM_EDIT_PASTE:
\r
170 if (GetFocus() == pEdit)
\r
173 m_View.ExecWB( OLECMDID_PASTE, OLECMDEXECOPT_DODEFAULT, NULL, NULL );
\r
175 case IDM_EDIT_DELETE:
\r
176 if (GetFocus() == pEdit)
\r
178 #if !defined(__GNUC__)
\r
180 m_View.ExecWB( OLECMDID_DELETE, OLECMDEXECOPT_DODEFAULT, NULL, NULL );
\r
183 case IDW_VIEW_STATUSBAR:
\r
186 case IDW_VIEW_TOOLBAR:
\r
191 // Handle notification WM_COMMAND from ComboboxEx
\r
192 if((HWND)lParam == m_ComboboxEx.GetHwnd())
\r
194 switch(HIWORD(wParam))
\r
196 case CBN_SELCHANGE:
\r
197 // User made selection from list
\r
199 // Get text from edit box
\r
200 CString str = m_ComboboxEx.GetWindowText();
\r
202 // Navigate to web page
\r
203 m_View.Navigate(str);
\r
212 void CMainFrame::OnDocumentBegin(DISPPARAMS* pDispParams)
\r
214 UNREFERENCED_PARAMETER(pDispParams);
\r
215 TRACE(_T("OnDocumentBegin\n"));
\r
218 void CMainFrame::OnCreate()
\r
220 // Call the base function first
\r
221 CFrame::OnCreate();
\r
226 void CMainFrame::OnDocumentComplete(DISPPARAMS* pDispParams)
\r
228 UNREFERENCED_PARAMETER(pDispParams);
\r
229 GetStatusBar().SetPartText(0, _T("Done"));
\r
232 void CMainFrame::OnDownloadBegin(DISPPARAMS* pDispParams)
\r
234 UNREFERENCED_PARAMETER(pDispParams);
\r
237 void CMainFrame::OnDownloadComplete(DISPPARAMS* pDispParams)
\r
239 UNREFERENCED_PARAMETER(pDispParams);
\r
242 void CMainFrame::OnInitialUpdate()
\r
244 // The frame is now created.
\r
245 // Place any additional startup code here.
\r
250 void CMainFrame::OnNavigateComplete2(DISPPARAMS* pDispParams)
\r
252 CString str = _T("NavigateComplete2: ");
\r
254 if (pDispParams->rgvarg[0].vt == (VT_BYREF|VT_VARIANT))
\r
257 vtURL = *pDispParams->rgvarg[0].pvarVal;
\r
258 vtURL.vt = VT_BSTR;
\r
260 str += vtURL.bstrVal;
\r
262 VariantClear(&vtURL);
\r
267 HRESULT hr = GetBrowser().GetIWebBrowser2()->get_LocationURL(&bstrUrlName);
\r
271 // Update the URL in the ComboboxEx edit box.
\r
272 m_ComboboxEx.SetWindowText(W2T(bstrUrlName));
\r
276 void CMainFrame::OnNewWindow2(DISPPARAMS* pDispParams)
\r
278 UNREFERENCED_PARAMETER(pDispParams);
\r
279 TRACE(_T("NewWindow2\n"));
\r
282 LRESULT CMainFrame::OnNotify(WPARAM wParam, LPARAM lParam)
\r
284 switch (((LPNMHDR)lParam)->code)
\r
288 switch (((PNMCBEENDEDIT)lParam)->iWhy)
\r
291 // User hit return in edit box
\r
293 // Get text from edit box
\r
294 CString str = m_ComboboxEx.GetWindowText();
\r
296 // Insert text into the list box.
\r
297 COMBOBOXEXITEM CBXitem = {0};
\r
298 CBXitem.mask = CBEIF_TEXT;
\r
299 CBXitem.pszText = (LPTSTR)str.c_str();
\r
300 m_ComboboxEx.InsertItem(&CBXitem);
\r
302 // Navigate to the web page
\r
303 m_View.Navigate(str);
\r
310 return CFrame::OnNotify(wParam, lParam);
\r
313 void CMainFrame::OnProgressChange(DISPPARAMS* pDispParams)
\r
317 if (pDispParams->cArgs != 0)
\r
319 if (pDispParams->cArgs > 1 && pDispParams->rgvarg[1].vt == VT_I4)
\r
321 str.Format(_T("Progress = %d"), pDispParams->rgvarg[1].lVal);
\r
324 if (pDispParams->rgvarg[0].vt == VT_I4)
\r
327 str2.Format(_T(", ProgressMax = %d\n"), pDispParams->rgvarg[0].lVal);
\r
335 void CMainFrame::OnPropertyChange(DISPPARAMS* pDispParams)
\r
338 if (pDispParams->cArgs > 0 && pDispParams->rgvarg[0].vt == VT_BSTR)
\r
339 str.Format(_T("Property Change: %s\n"), (LPCTSTR)W2T(pDispParams->rgvarg[0].bstrVal));
\r
344 void CMainFrame::OnStatusTextChange(DISPPARAMS* pDispParams)
\r
346 LPOLESTR lpStatusText = pDispParams->rgvarg->bstrVal;
\r
348 if (GetStatusBar().IsWindow() && lpStatusText)
\r
350 if (lstrcmp(W2T(lpStatusText), _T("")))
\r
352 GetStatusBar().SetPartText(0, W2T(lpStatusText));
\r
355 GetStatusBar().SetPartText(0, _T("Done"));
\r
359 void CMainFrame::OnTitleChange(DISPPARAMS* pDispParams)
\r
361 TRACE(_T("TitleChange: \n"));
\r
364 if (pDispParams->cArgs > 0 && pDispParams->rgvarg[0].vt == VT_BSTR)
\r
366 str = CString(pDispParams->rgvarg[0].bstrVal) + _T(" - ") + LoadString(IDW_MAIN);
\r
367 TRACE(W2T(pDispParams->rgvarg[0].bstrVal));
\r
370 str = LoadString(IDW_MAIN);
\r
372 SetWindowText(str);
\r
375 void CMainFrame::SetupToolBar()
\r
377 // Set the Resource IDs for the toolbar buttons
\r
378 AddToolBarButton( IDM_BACK );
\r
379 AddToolBarButton( IDM_FORWARD );
\r
380 AddToolBarButton( 0 ); // Separator
\r
381 AddToolBarButton( IDM_REFRESH );
\r
382 AddToolBarButton( IDM_STOP );
\r
383 AddToolBarButton( 0 ); // Separator
\r
384 AddToolBarButton( IDM_HOME );
\r
386 // Set the image lists for normal, hot and disabled buttons
\r
387 int BitsPerPixel = GetDesktopWindow()->GetDC()->GetDeviceCaps(BITSPIXEL);
\r
388 if (GetWinVersion() >= 2501 && LoadBitmap(MAKEINTRESOURCE(IDB_TOOLBAR32_NORM)) && BitsPerPixel == 32)
\r
390 // Use 32bit bitmaps for XP and above (support for 32bit bitmaps began with XP)
\r
391 SetToolBarImages(RGB(0,0,0), IDB_TOOLBAR32_NORM, IDB_TOOLBAR32_HOT, IDB_TOOLBAR32_DIS);
\r
395 // Use 24bit bitmaps for Win2000 and below
\r
396 SetToolBarImages(RGB(255,0,255), IDB_TOOLBAR24_NORM, IDB_TOOLBAR24_HOT, IDB_TOOLBAR24_DIS);
\r
399 std::vector<UINT> IconData;
\r
403 AddComboBoxBand(Height);
\r
405 // Set the icons for popup menu items
\r
406 IconData.push_back ( IDM_FILE_NEW );
\r
407 IconData.push_back ( IDM_FILE_OPEN );
\r
408 IconData.push_back ( IDM_FILE_SAVE );
\r
409 IconData.push_back ( IDM_EDIT_CUT );
\r
410 IconData.push_back ( IDM_EDIT_COPY );
\r
411 IconData.push_back ( IDM_EDIT_PASTE);
\r
412 IconData.push_back ( IDM_FILE_PRINT);
\r
413 IconData.push_back ( IDM_HELP_ABOUT);
\r
416 AddMenuIcons(IconData, RGB(192, 192, 192), IDW_MAIN, 0);
\r
419 LRESULT CMainFrame::WndProc(UINT uMsg, WPARAM wParam, LPARAM lParam)
\r
423 //Additional messages to be handled go here
\r
426 // pass unhandled messages on for default processing
\r
427 return WndProcDefault(uMsg, wParam, lParam);
\r