Commit before breaking everything
[matches/honours.git] / research / transmission_spectroscopy / TOF / Win32++ / samples / Browser / src / Mainfrm.cpp
1 ////////////////////////////////////////////////////\r
2 // Mainfrm.cpp\r
3 \r
4 #include "stdafx.h"\r
5 #include "resource.h"\r
6 #include "mainfrm.h"\r
7 #include <shlobj.h>\r
8 #include <sstream>\r
9 \r
10 \r
11 // Definitions for the CMainFrame class\r
12 CMainFrame::CMainFrame()\r
13 {\r
14         //Set m_View as the view window of the frame\r
15         SetView(m_View);\r
16 \r
17         // Set CMainFrame as our event sink\r
18         m_EventSink.SetSink(this);\r
19 \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
23 }\r
24 \r
25 CMainFrame::~CMainFrame()\r
26 {\r
27         // Destructor for CMainFrame.\r
28 }\r
29 \r
30 void CMainFrame::AddComboBoxBand(int Listbox_Height)\r
31 {\r
32         // Get the reference to the rebar object\r
33         CReBar& RB = GetReBar();\r
34         ReBarTheme RBTheme = RB.GetReBarTheme();\r
35 \r
36         // Create the ComboboxEx window\r
37         m_ComboboxEx.Create(&GetReBar());\r
38 \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
51 \r
52         RB.InsertBand(-1, rbbi);\r
53 }\r
54 \r
55 void CMainFrame::ConnectEvents()\r
56 {\r
57         IUnknown* pUnk = GetBrowser().GetAXWindow().GetUnknown();\r
58         if(!pUnk)\r
59                 return;\r
60 \r
61         IConnectionPoint* pcp;\r
62         pcp = GetConnectionPoint(DIID_DWebBrowserEvents2);\r
63         if(!pcp)\r
64                 return;\r
65 \r
66         pcp->Advise(&m_EventSink, &m_eventCookie);\r
67         pcp->Release();\r
68         pUnk->Release();\r
69 }\r
70 \r
71 IConnectionPoint* CMainFrame::GetConnectionPoint(REFIID riid)\r
72 {\r
73         IUnknown *pUnk = GetBrowser().GetAXWindow().GetUnknown();\r
74         if(!pUnk)\r
75                 return NULL;\r
76 \r
77         IConnectionPointContainer* pcpc;\r
78         IConnectionPoint* pcp = NULL;\r
79 \r
80         HRESULT hr = pUnk->QueryInterface(IID_IConnectionPointContainer, (void**)&pcpc);\r
81         if(SUCCEEDED(hr))\r
82         {\r
83                 pcpc->FindConnectionPoint(riid, &pcp);\r
84                 pcpc->Release();\r
85         }\r
86 \r
87         pUnk->Release();\r
88 \r
89         return pcp;\r
90 }\r
91 \r
92 void CMainFrame::OnBeforeNavigate2(DISPPARAMS* pDispParams)\r
93 {\r
94         UNREFERENCED_PARAMETER(pDispParams);\r
95 }\r
96 \r
97 void CMainFrame::OnCommandStateChange(DISPPARAMS* pDispParams)\r
98 {\r
99         CToolBar& TB = GetToolBar();\r
100 \r
101         if (GetToolBar().IsWindow())\r
102         {\r
103                 if ((pDispParams) && (pDispParams->cArgs == 2))\r
104                 {\r
105                         if (pDispParams->rgvarg[1].vt == (VT_I4) && pDispParams->rgvarg[0].vt == (VT_BOOL))\r
106                         {\r
107                                 VARIANT_BOOL bEnable = pDispParams->rgvarg[0].boolVal;\r
108                                 int nCommand = pDispParams->rgvarg[1].intVal;\r
109                                 {\r
110                                         switch (nCommand)\r
111                                         {\r
112                                         case 1: // Navigate forward:\r
113                                                 bEnable ? TB.EnableButton(IDM_FORWARD) : TB.DisableButton(IDM_FORWARD);\r
114 \r
115                                                 break;\r
116                                         case 2: // Navigate back:\r
117                                                 bEnable ? TB.EnableButton(IDM_BACK) : TB.DisableButton(IDM_BACK);\r
118                                                 break;\r
119                                         }\r
120                                 }\r
121                         }\r
122                 }\r
123         }\r
124 }\r
125 \r
126 BOOL CMainFrame::OnCommand(WPARAM wParam, LPARAM lParam)\r
127 {\r
128         // Respond to menu and and toolbar input\r
129 \r
130         CEdit* pEdit = m_ComboboxEx.GetEditCtrl();\r
131 \r
132         switch(LOWORD(wParam))\r
133         {\r
134         case IDM_FILE_EXIT:\r
135                 // End the application\r
136                 PostMessage(WM_CLOSE, 0, 0);\r
137                 return TRUE;\r
138         case IDM_HELP_ABOUT:\r
139                 // Display the help dialog\r
140                 OnHelp();\r
141                 return TRUE;\r
142         case IDM_BACK:\r
143                 m_View.GoBack();\r
144                 return TRUE;\r
145         case IDM_FORWARD:\r
146                 m_View.GoForward();\r
147                 return TRUE;\r
148         case IDM_REFRESH:\r
149                 m_View.Refresh();\r
150                 return TRUE;\r
151         case IDM_STOP:\r
152                 m_View.Stop();\r
153                 return TRUE;\r
154         case IDM_HOME:\r
155                 m_View.GoHome();\r
156                 return TRUE;\r
157         case IDM_EDIT_CUT:\r
158                 if (GetFocus() == pEdit)\r
159                         pEdit->Cut();\r
160                 else\r
161                         m_View.ExecWB( OLECMDID_CUT, OLECMDEXECOPT_DODEFAULT, NULL, NULL );\r
162                 return TRUE;\r
163         case IDM_EDIT_COPY:\r
164                 if (GetFocus() == pEdit)\r
165                         pEdit->Copy();\r
166                 else\r
167                         m_View.ExecWB( OLECMDID_COPY, OLECMDEXECOPT_DODEFAULT, NULL, NULL );\r
168                 return TRUE;\r
169         case IDM_EDIT_PASTE:\r
170                 if (GetFocus() == pEdit)\r
171                         pEdit->Paste();\r
172                 else\r
173                         m_View.ExecWB( OLECMDID_PASTE, OLECMDEXECOPT_DODEFAULT, NULL, NULL );\r
174                 return TRUE;\r
175         case IDM_EDIT_DELETE:\r
176                 if (GetFocus() == pEdit)\r
177                         pEdit->Clear();\r
178 #if !defined(__GNUC__)\r
179                 else\r
180                         m_View.ExecWB( OLECMDID_DELETE, OLECMDEXECOPT_DODEFAULT, NULL, NULL );\r
181 #endif\r
182                 return TRUE;\r
183         case IDW_VIEW_STATUSBAR:\r
184                 OnViewStatusBar();\r
185                 return TRUE;\r
186         case IDW_VIEW_TOOLBAR:\r
187                 OnViewToolBar();\r
188                 return TRUE;\r
189         }\r
190 \r
191         // Handle notification WM_COMMAND from ComboboxEx\r
192         if((HWND)lParam == m_ComboboxEx.GetHwnd())\r
193         {\r
194                 switch(HIWORD(wParam))\r
195                 {\r
196                 case CBN_SELCHANGE:\r
197                         // User made selection from list\r
198                         {\r
199                                 // Get text from edit box\r
200                                 CString str = m_ComboboxEx.GetWindowText();\r
201 \r
202                                 // Navigate to web page\r
203                                 m_View.Navigate(str);\r
204                         }\r
205                         return TRUE;\r
206                 }\r
207         }\r
208 \r
209         return FALSE;\r
210 }\r
211 \r
212 void CMainFrame::OnDocumentBegin(DISPPARAMS* pDispParams)\r
213 {\r
214         UNREFERENCED_PARAMETER(pDispParams);\r
215         TRACE(_T("OnDocumentBegin\n"));\r
216 }\r
217 \r
218 void CMainFrame::OnCreate()\r
219 {\r
220         // Call the base function first\r
221         CFrame::OnCreate();\r
222 \r
223         ConnectEvents();\r
224 }\r
225 \r
226 void CMainFrame::OnDocumentComplete(DISPPARAMS* pDispParams)\r
227 {\r
228         UNREFERENCED_PARAMETER(pDispParams);\r
229         GetStatusBar().SetPartText(0, _T("Done"));\r
230 }\r
231 \r
232 void CMainFrame::OnDownloadBegin(DISPPARAMS* pDispParams)\r
233 {\r
234         UNREFERENCED_PARAMETER(pDispParams);\r
235 }\r
236 \r
237 void CMainFrame::OnDownloadComplete(DISPPARAMS* pDispParams)\r
238 {\r
239         UNREFERENCED_PARAMETER(pDispParams);\r
240 }\r
241 \r
242 void CMainFrame::OnInitialUpdate()\r
243 {\r
244         // The frame is now created.\r
245         // Place any additional startup code here.\r
246 \r
247         m_View.GoHome();\r
248 }\r
249 \r
250 void CMainFrame::OnNavigateComplete2(DISPPARAMS* pDispParams)\r
251 {\r
252         CString str = _T("NavigateComplete2: ");\r
253 \r
254         if (pDispParams->rgvarg[0].vt == (VT_BYREF|VT_VARIANT))\r
255         {\r
256                 VARIANT vtURL;\r
257                 vtURL = *pDispParams->rgvarg[0].pvarVal;\r
258                 vtURL.vt = VT_BSTR;\r
259 \r
260                 str += vtURL.bstrVal;\r
261                 TRACE(str);\r
262                 VariantClear(&vtURL);\r
263         }\r
264 \r
265         BSTR bstrUrlName;\r
266 \r
267         HRESULT hr = GetBrowser().GetIWebBrowser2()->get_LocationURL(&bstrUrlName);\r
268         if (FAILED(hr))\r
269                 return;\r
270 \r
271         // Update the URL in the ComboboxEx edit box.\r
272         m_ComboboxEx.SetWindowText(W2T(bstrUrlName));\r
273         m_View.SetFocus();\r
274 }\r
275 \r
276 void CMainFrame::OnNewWindow2(DISPPARAMS* pDispParams)\r
277 {\r
278         UNREFERENCED_PARAMETER(pDispParams);\r
279         TRACE(_T("NewWindow2\n"));\r
280 }\r
281 \r
282 LRESULT CMainFrame::OnNotify(WPARAM wParam, LPARAM lParam)\r
283 {\r
284         switch (((LPNMHDR)lParam)->code)\r
285         {\r
286         case CBEN_ENDEDIT:\r
287                 {\r
288                         switch (((PNMCBEENDEDIT)lParam)->iWhy)\r
289                         {\r
290                         case CBENF_RETURN:\r
291                                 // User hit return in edit box\r
292                                 {\r
293                                         // Get text from edit box\r
294                                         CString str = m_ComboboxEx.GetWindowText();\r
295 \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
301 \r
302                                         // Navigate to the web page\r
303                                         m_View.Navigate(str);\r
304                                         return FALSE;\r
305                                 }\r
306                         }\r
307                 }\r
308         }\r
309 \r
310         return CFrame::OnNotify(wParam, lParam);\r
311 }\r
312 \r
313 void CMainFrame::OnProgressChange(DISPPARAMS* pDispParams)\r
314 {\r
315         CString str;\r
316 \r
317         if (pDispParams->cArgs != 0)\r
318         {\r
319                 if (pDispParams->cArgs > 1 && pDispParams->rgvarg[1].vt == VT_I4)\r
320                 {\r
321                         str.Format(_T("Progress = %d"), pDispParams->rgvarg[1].lVal);\r
322                 }\r
323 \r
324                 if (pDispParams->rgvarg[0].vt == VT_I4)\r
325                 {\r
326                         CString str2;\r
327                         str2.Format(_T(", ProgressMax = %d\n"), pDispParams->rgvarg[0].lVal);\r
328                         str = str + str2;\r
329                 }\r
330 \r
331                 TRACE(str);\r
332    }\r
333 }\r
334 \r
335 void CMainFrame::OnPropertyChange(DISPPARAMS* pDispParams)\r
336 {\r
337         CString str;\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
340 \r
341         TRACE(str);\r
342 }\r
343 \r
344 void CMainFrame::OnStatusTextChange(DISPPARAMS* pDispParams)\r
345 {\r
346         LPOLESTR lpStatusText = pDispParams->rgvarg->bstrVal;\r
347 \r
348         if (GetStatusBar().IsWindow() && lpStatusText)\r
349         {\r
350                 if (lstrcmp(W2T(lpStatusText), _T("")))\r
351                 {\r
352                         GetStatusBar().SetPartText(0, W2T(lpStatusText));\r
353                 }\r
354                 else\r
355                         GetStatusBar().SetPartText(0, _T("Done"));\r
356         }\r
357 }\r
358 \r
359 void CMainFrame::OnTitleChange(DISPPARAMS* pDispParams)\r
360 {\r
361         TRACE(_T("TitleChange: \n"));\r
362     CString str;\r
363 \r
364         if (pDispParams->cArgs > 0 && pDispParams->rgvarg[0].vt == VT_BSTR)\r
365         {\r
366         str = CString(pDispParams->rgvarg[0].bstrVal) + _T(" - ") + LoadString(IDW_MAIN);\r
367                 TRACE(W2T(pDispParams->rgvarg[0].bstrVal));\r
368         }\r
369         else\r
370                 str = LoadString(IDW_MAIN);\r
371 \r
372         SetWindowText(str);\r
373 }\r
374 \r
375 void CMainFrame::SetupToolBar()\r
376 {\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
385 \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
389         {\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
392         }\r
393         else\r
394         {\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
397         }\r
398 \r
399         std::vector<UINT> IconData;\r
400         if (IsReBarUsed())\r
401         {\r
402                 int Height = 22;\r
403                 AddComboBoxBand(Height);\r
404 \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
414         }\r
415 \r
416         AddMenuIcons(IconData, RGB(192, 192, 192), IDW_MAIN, 0);\r
417 }\r
418 \r
419 LRESULT CMainFrame::WndProc(UINT uMsg, WPARAM wParam, LPARAM lParam)\r
420 {\r
421 //      switch (uMsg)\r
422 //      {\r
423                 //Additional messages to be handled go here\r
424 //      }\r
425 \r
426         // pass unhandled messages on for default processing\r
427         return WndProcDefault(uMsg, wParam, lParam);\r
428 }\r
429 \r

UCC git Repository :: git.ucc.asn.au