Commit before breaking everything
[matches/honours.git] / research / transmission_spectroscopy / TOF / Win32++ / samples / Notepad / src / Mainfrm.cpp
diff --git a/research/transmission_spectroscopy/TOF/Win32++/samples/Notepad/src/Mainfrm.cpp b/research/transmission_spectroscopy/TOF/Win32++/samples/Notepad/src/Mainfrm.cpp
new file mode 100644 (file)
index 0000000..a8c6d37
--- /dev/null
@@ -0,0 +1,460 @@
+/////////////////////////////////////////////////\r
+// Mainfrm.cpp\r
+\r
+#include "stdafx.h"\r
+#include "mainfrm.h"\r
+#include <richedit.h>\r
+#include "resource.h"\r
+\r
+\r
+//For Visual C++ 6 and without a modern SDK\r
+#ifndef DWORD_PTR\r
+#define DWORD_PTR DWORD\r
+#endif\r
+\r
+\r
+// definitions for the CMainFrame class\r
+CMainFrame::CMainFrame()\r
+{\r
+       m_strPathName = _T("");\r
+       SetView(m_RichView);\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++\\Notepad Sample"));\r
+\r
+       // Load the settings from the registry with 5 MRU entries\r
+       LoadRegistryMRUSettings(5);\r
+}\r
+\r
+CMainFrame::~CMainFrame()\r
+{\r
+}\r
+\r
+void CMainFrame::OnInitialUpdate()\r
+{\r
+       DragAcceptFiles(TRUE);\r
+       SetWindowTitle();\r
+       m_RichView.SetFocus();\r
+}\r
+\r
+LRESULT CMainFrame::OnNotify(WPARAM wParam, LPARAM lParam)\r
+{\r
+       NMHDR* pNMH;\r
+       pNMH = (LPNMHDR) lParam;\r
+       switch (pNMH->code)\r
+       {\r
+       case EN_DROPFILES:\r
+               {\r
+                       ENDROPFILES* ENDrop = (ENDROPFILES*)lParam;\r
+                       HDROP hDropInfo = (HDROP) ENDrop->hDrop;\r
+                       OnDropFiles(hDropInfo);\r
+               }\r
+               return TRUE;\r
+       }\r
+\r
+       return CFrame::OnNotify(wParam, lParam);\r
+}\r
+\r
+BOOL CMainFrame::OnCommand(WPARAM wParam, LPARAM lParam)\r
+{\r
+       UNREFERENCED_PARAMETER(lParam);\r
+\r
+       switch (LOWORD(wParam))\r
+       {\r
+       case IDM_FILE_NEW:\r
+               OnFileNew();\r
+               return TRUE;\r
+       case IDM_FILE_OPEN:\r
+               OnFileOpen();\r
+               return TRUE;\r
+       case IDM_FILE_SAVE:\r
+               OnFileSave();\r
+               return TRUE;\r
+       case IDM_FILE_SAVEAS:\r
+               OnFileSaveAs();\r
+               return TRUE;\r
+       case IDM_FILE_PRINT:\r
+               OnFilePrint();\r
+               return TRUE;\r
+       case IDM_EDIT_COPY:\r
+               OnEditCopy();\r
+               return TRUE;\r
+       case IDM_EDIT_PASTE:\r
+               OnEditPaste();\r
+               return TRUE;\r
+       case IDM_EDIT_CUT:\r
+               OnEditCut();\r
+               return TRUE;\r
+       case IDM_EDIT_DELETE:\r
+               OnEditDelete();\r
+               return TRUE;\r
+       case IDM_EDIT_REDO:\r
+               OnEditRedo();\r
+               return TRUE;\r
+       case IDM_EDIT_UNDO:\r
+               OnEditUndo();\r
+               return TRUE;\r
+       case IDM_FILE_EXIT:\r
+               ::PostMessage(m_hWnd, WM_CLOSE, 0, 0);\r
+               return TRUE;\r
+       case IDW_VIEW_STATUSBAR:\r
+               OnViewStatusBar();\r
+               return TRUE;\r
+       case IDW_VIEW_TOOLBAR:\r
+               OnViewToolBar();\r
+               return TRUE;\r
+       case IDM_HELP_ABOUT:\r
+               OnHelp();\r
+               return TRUE;\r
+                       case IDW_FILE_MRU_FILE1:\r
+       case IDW_FILE_MRU_FILE2:\r
+       case IDW_FILE_MRU_FILE3:\r
+       case IDW_FILE_MRU_FILE4:\r
+       case IDW_FILE_MRU_FILE5:\r
+               {\r
+                       UINT nMRUIndex = LOWORD(wParam) - IDW_FILE_MRU_FILE1;\r
+                       CString strMRUText = GetMRUEntry(nMRUIndex);\r
+\r
+                       if (ReadFile(strMRUText))\r
+                               m_strPathName = strMRUText;\r
+                       else\r
+                               RemoveMRUEntry(strMRUText);\r
+\r
+                       SetWindowTitle();\r
+                       return TRUE;\r
+               }\r
+\r
+       } // switch cmd\r
+\r
+       return FALSE;\r
+} // CMainFrame::OnCommand(...)\r
+\r
+\r
+void CMainFrame::OnFileNew()\r
+{\r
+       m_RichView.SetWindowText(_T(""));\r
+       m_strPathName = _T("");\r
+       SetWindowTitle();\r
+       m_RichView.SetFontDefaults();\r
+       m_RichView.SendMessage(EM_SETMODIFY, FALSE, 0);\r
+}\r
+\r
+void CMainFrame::OnFilePrint()\r
+{\r
+       PRINTDLG pd;\r
+\r
+       // Initialize PRINTDLG\r
+       ZeroMemory(&pd, sizeof(pd));\r
+       pd.lStructSize = sizeof(pd);\r
+       pd.hwndOwner   = m_hWnd;\r
+       pd.hDevMode    = NULL;     // Don't forget to free or store hDevMode\r
+       pd.hDevNames   = NULL;     // Don't forget to free or store hDevNames\r
+       pd.Flags       = PD_USEDEVMODECOPIESANDCOLLATE | PD_RETURNDC;\r
+       pd.nCopies     = 1;\r
+       pd.nFromPage   = 0xFFFF;\r
+       pd.nToPage     = 0xFFFF;\r
+       pd.nMinPage    = 1;\r
+       pd.nMaxPage    = 0xFFFF;\r
+       pd.hwndOwner = m_hWnd;\r
+\r
+       if (PrintDlg(&pd)==TRUE)\r
+       {\r
+               HDC hPrinterDC = pd.hDC;\r
+\r
+               // This code basically taken from MS KB article Q129860\r
+\r
+               FORMATRANGE fr;\r
+               int     nHorizRes   = ::GetDeviceCaps(hPrinterDC, HORZRES);\r
+               int     nVertRes    = ::GetDeviceCaps(hPrinterDC, VERTRES);\r
+               int nLogPixelsX = ::GetDeviceCaps(hPrinterDC, LOGPIXELSX);\r
+               int nLogPixelsY = ::GetDeviceCaps(hPrinterDC, LOGPIXELSY);\r
+               LONG lTextLength;   // Length of document.\r
+               LONG lTextPrinted;  // Amount of document printed.\r
+\r
+               // Ensure the printer DC is in MM_TEXT mode.\r
+               ::SetMapMode ( hPrinterDC, MM_TEXT );\r
+\r
+               // Rendering to the same DC we are measuring.\r
+               ZeroMemory(&fr, sizeof(fr));\r
+               fr.hdc = hPrinterDC;\r
+               fr.hdcTarget = hPrinterDC;\r
+\r
+               // Set up the page.\r
+               int margin = 200; // 1440 TWIPS = 1 inch.\r
+               fr.rcPage.left     = fr.rcPage.top = margin;\r
+               fr.rcPage.right    = (nHorizRes/nLogPixelsX) * 1440 - margin;\r
+               fr.rcPage.bottom   = (nVertRes/nLogPixelsY) * 1440 - margin;\r
+\r
+               // Set up margins all around.\r
+               fr.rc.left   = fr.rcPage.left ;//+ 1440;\r
+               fr.rc.top    = fr.rcPage.top ;//+ 1440;\r
+               fr.rc.right  = fr.rcPage.right ;//- 1440;\r
+               fr.rc.bottom = fr.rcPage.bottom ;//- 1440;\r
+\r
+               // Default the range of text to print as the entire document.\r
+               fr.chrg.cpMin = 0;\r
+               fr.chrg.cpMax = -1;\r
+               m_RichView.SendMessage(EM_FORMATRANGE, true, (LPARAM)&fr);\r
+\r
+               // Set up the print job (standard printing stuff here).\r
+               DOCINFO di;\r
+               ZeroMemory(&di, sizeof(di));\r
+               di.cbSize = sizeof(DOCINFO);\r
+               di.lpszDocName = m_strPathName;\r
+\r
+               // Do not print to file.\r
+               di.lpszOutput = NULL;\r
+\r
+               // Start the document.\r
+               ::StartDoc(hPrinterDC, &di);\r
+               GETTEXTLENGTHEX tl;\r
+               tl.flags = GTL_NUMCHARS;\r
+\r
+               // Find out real size of document in characters.\r
+               lTextLength = (LONG)m_RichView.SendMessage(EM_GETTEXTLENGTHEX, (WPARAM)&tl, 0L);\r
+\r
+               do\r
+               {\r
+                       // Start the page.\r
+                       ::StartPage(hPrinterDC);\r
+\r
+                       // Print as much text as can fit on a page. The return value is\r
+                       // the index of the first character on the next page. Using TRUE\r
+                       // for the wParam parameter causes the text to be printed.\r
+                       lTextPrinted = (LONG)::SendMessage(m_RichView.GetHwnd(), EM_FORMATRANGE, true, (LPARAM)&fr);\r
+\r
+                       m_RichView.SendMessage(EM_DISPLAYBAND, 0, (LPARAM)&fr.rc);\r
+\r
+                       // Print last page.\r
+                       ::EndPage(hPrinterDC);\r
+\r
+                       // If there is more text to print, adjust the range of characters\r
+                       // to start printing at the first character of the next page.\r
+                       if (lTextPrinted < lTextLength)\r
+                       {\r
+                               fr.chrg.cpMin = (LONG)lTextPrinted;\r
+                               fr.chrg.cpMax = -1;\r
+                       }\r
+               }\r
+               while (lTextPrinted < lTextLength);\r
+\r
+               // Tell the control to release cached information.\r
+               m_RichView.SendMessage(EM_FORMATRANGE, false, 0L);\r
+\r
+               ::EndDoc (hPrinterDC);\r
+\r
+               // Delete DC when done.\r
+               ::DeleteDC(hPrinterDC);\r
+       }\r
+}\r
+\r
+void CMainFrame::OnEditCut()\r
+{\r
+       m_RichView.SendMessage(WM_CUT, 0, 0);\r
+}\r
+void CMainFrame::OnEditCopy()\r
+{\r
+       m_RichView.SendMessage(WM_COPY, 0, 0);\r
+}\r
+void CMainFrame::OnEditPaste()\r
+{\r
+       m_RichView.SendMessage(EM_PASTESPECIAL, CF_TEXT, 0);\r
+}\r
+void CMainFrame::OnEditDelete()\r
+{\r
+       m_RichView.SendMessage(WM_CLEAR, 0, 0);\r
+}\r
+void CMainFrame::OnEditRedo()\r
+{\r
+       m_RichView.SendMessage(EM_REDO, 0, 0);\r
+}\r
+void CMainFrame::OnEditUndo()\r
+{\r
+       m_RichView.SendMessage(EM_UNDO, 0, 0);\r
+}\r
+\r
+void CMainFrame::OnClose()\r
+{\r
+       //Check for unsaved text\r
+       BOOL bChanged = (BOOL)m_RichView.SendMessage(EM_GETMODIFY, 0, 0);\r
+       if (bChanged)\r
+               if (::MessageBox(NULL, _T("Save changes to this document"), _T("TextEdit"), MB_YESNO | MB_ICONWARNING) == IDYES)\r
+                       OnFileSave();\r
+\r
+       CFrame::OnClose();\r
+}\r
+\r
+void CMainFrame::OnDropFiles(HDROP hDropInfo)\r
+{\r
+       TCHAR szFileName[_MAX_PATH];\r
+       ::DragQueryFile((HDROP)hDropInfo, 0, (LPTSTR)szFileName, _MAX_PATH);\r
+\r
+       ReadFile(szFileName);\r
+}\r
+\r
+BOOL CMainFrame::ReadFile(LPCTSTR szFileName)\r
+{\r
+       // Open the file for reading\r
+       CFile File;\r
+       if (!File.Open(szFileName, OPEN_EXISTING))\r
+       {\r
+               CString str = _T("Failed to load:  ");\r
+               str += szFileName;\r
+               ::MessageBox(NULL, str, _T("Warning"), MB_ICONWARNING);\r
+               return FALSE;\r
+       }\r
+\r
+       //Set default font and color\r
+       m_RichView.SetFontDefaults();\r
+\r
+       EDITSTREAM es;\r
+       es.dwCookie =  (DWORD_PTR) File.GetHandle();\r
+       es.pfnCallback = (EDITSTREAMCALLBACK) MyStreamInCallback;\r
+       m_RichView.SendMessage(EM_STREAMIN, SF_TEXT, (LPARAM)&es);\r
+\r
+       //Clear the modified text flag\r
+       m_RichView.SendMessage(EM_SETMODIFY, FALSE, 0);\r
+\r
+       return TRUE;\r
+}\r
+\r
+BOOL CMainFrame::WriteFile(LPCTSTR szFileName)\r
+{\r
+       // Open the file for writing\r
+       CFile File;\r
+       if (!File.Open(szFileName, CREATE_ALWAYS))\r
+       {\r
+               CString str = _T("Failed to write:  ");\r
+               str += szFileName;\r
+               ::MessageBox(NULL, str, _T("Warning"), MB_ICONWARNING);\r
+               return FALSE;\r
+       }\r
+\r
+       EDITSTREAM es;\r
+\r
+       es.dwCookie =  (DWORD_PTR) File.GetHandle();\r
+       es.dwError = 0;\r
+       es.pfnCallback = (EDITSTREAMCALLBACK) MyStreamOutCallback;\r
+\r
+       m_RichView.SendMessage(EM_STREAMOUT, SF_TEXT, (LPARAM)&es);\r
+\r
+       //Clear the modified text flag\r
+       m_RichView.SendMessage(EM_SETMODIFY, FALSE, 0);\r
+\r
+       return TRUE;\r
+}\r
+\r
+void CMainFrame::OnFileOpen()\r
+{\r
+       // szFilters is a text string that includes two file name filters:\r
+       // "*.my" for "MyType Files" and "*.*' for "All Files."\r
+       CString Filters( _T("Text Files (*.txt)\0*.txt\0All Files (*.*)\0*.*\0\0"), 46);\r
+       CFile File;\r
+       CString str = File.OpenFileDialog(0, OFN_FILEMUSTEXIST, Filters, this);\r
+\r
+       if (!str.IsEmpty())\r
+       {\r
+               ReadFile(str);\r
+               SetFileName(str);\r
+               AddMRUEntry(str);\r
+               SetWindowTitle();\r
+       }\r
+}\r
+\r
+void CMainFrame::OnFileSave()\r
+{\r
+       if (m_strPathName == _T(""))\r
+               OnFileSaveAs();\r
+       else\r
+               WriteFile(m_strPathName);\r
+}\r
+\r
+void CMainFrame::OnFileSaveAs()\r
+{\r
+       // szFilters is a text string that includes two file name filters:\r
+       // "*.my" for "MyType Files" and "*.*' for "All Files."\r
+       CString Filters(_T("Text Files (*.txt)\0*.txt\0All Files (*.*)\0*.*\0\0"), 46);\r
+       CFile File;\r
+       CString str = File.SaveFileDialog(0, OFN_OVERWRITEPROMPT, Filters, _T("txt"), this);\r
+       \r
+       if (!str.IsEmpty())\r
+       {\r
+               WriteFile(str);\r
+               SetFileName(str);\r
+               AddMRUEntry(str);\r
+               SetWindowTitle();\r
+       }\r
+}\r
+\r
+void CMainFrame::SetFileName(LPCTSTR szFilePathName)\r
+{\r
+       //Truncate and save file name\r
+       int i = lstrlen(szFilePathName)+1;\r
+       while ((--i > 0) && (szFilePathName[i-1] != _T('\\')));\r
+\r
+       m_strPathName = szFilePathName+i;\r
+}\r
+\r
+void CMainFrame::SetWindowTitle()\r
+{\r
+    CString Title;\r
+\r
+       if (m_strPathName == _T("")) Title = _T("TextEdit - Untitled");\r
+\r
+       else Title = _T("TextEdit - ") + m_strPathName;\r
+       SetWindowText(Title);\r
+}\r
+\r
+void CMainFrame::SetupToolBar()\r
+{\r
+       // Define the resource IDs for the toolbar\r
+       AddToolBarButton( IDM_FILE_NEW   );\r
+       AddToolBarButton( IDM_FILE_OPEN  );\r
+       AddToolBarButton( IDM_FILE_SAVE  );\r
+       AddToolBarButton( 0 );                          // Separator\r
+       AddToolBarButton( IDM_EDIT_CUT   );\r
+       AddToolBarButton( IDM_EDIT_COPY  );\r
+       AddToolBarButton( IDM_EDIT_PASTE );\r
+       AddToolBarButton( 0 );                          // Separator\r
+       AddToolBarButton( IDM_FILE_PRINT );\r
+       AddToolBarButton( 0 );                          // Separator\r
+       AddToolBarButton( IDM_HELP_ABOUT );\r
+\r
+}\r
+\r
+LRESULT CMainFrame::WndProc(UINT uMsg, WPARAM wParam, LPARAM lParam)\r
+{\r
+//     switch (uMsg)\r
+//     {\r
+//\r
+//     }\r
+\r
+       return WndProcDefault(uMsg, wParam, lParam);\r
+}\r
+\r
+DWORD CALLBACK CMainFrame::MyStreamInCallback(DWORD dwCookie, LPBYTE pbBuff, LONG cb, LONG *pcb)\r
+{\r
+       // Required for StreamIn\r
+       if (!cb)\r
+               return (1);\r
+\r
+       *pcb = 0;\r
+       if (!::ReadFile((HANDLE)(DWORD_PTR) dwCookie, pbBuff, cb, (LPDWORD)pcb, NULL))\r
+               ::MessageBox(NULL, _T("ReadFile Failed"), _T(""), MB_OK);\r
+\r
+       return 0;\r
+}\r
+\r
+DWORD CALLBACK CMainFrame::MyStreamOutCallback(DWORD dwCookie, LPBYTE pbBuff, LONG cb, LONG *pcb)\r
+{\r
+       // Required for StreamOut\r
+       if(!cb)\r
+               return (1);\r
+\r
+       *pcb = 0;\r
+       if (!::WriteFile((HANDLE)(DWORD_PTR)dwCookie, pbBuff, cb, (LPDWORD)pcb, NULL))\r
+               ::MessageBox(NULL, _T("WriteFile Failed"), _T(""), MB_OK);\r
+       return 0;\r
+}\r
+\r

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