--- /dev/null
+////////////////////////////////////////////////////\r
+// MainMDIfrm.cpp - definitions for the CMainMDIFrame class\r
+\r
+#include "stdafx.h"\r
+#include "resource.h"\r
+#include "mainMDIfrm.h"\r
+#include "MDIChildSimple.h"\r
+#include "MDIChildRect.h"\r
+#include "MDIChildMax.h"\r
+#include "MDIChildText.h"\r
+#include "MDIChildTreeView.h"\r
+#include "MDIChildListView.h"\r
+\r
+\r
+CMainMDIFrame::CMainMDIFrame()\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++\\MDI Frame Sample"));\r
+}\r
+\r
+CMainMDIFrame::~CMainMDIFrame()\r
+{\r
+}\r
+\r
+void CMainMDIFrame::OnInitialUpdate()\r
+{\r
+ //The frame is now created.\r
+ //Place any additional startup code here.\r
+}\r
+\r
+void CMainMDIFrame::OnFileNew()\r
+{\r
+ // Creates the popup menu when the "New" toolbar button is pressed\r
+\r
+ // Position the popup menu\r
+ CToolBar& TB = GetToolBar();\r
+ RECT rc = TB.GetItemRect(TB.CommandToIndex(IDM_FILE_NEW));\r
+ TB.MapWindowPoints(NULL, (LPPOINT)&rc, 2);\r
+\r
+ TPMPARAMS tpm;\r
+ tpm.cbSize = sizeof(TPMPARAMS);\r
+ tpm.rcExclude = rc;\r
+\r
+ // Load the popup menu\r
+ CMenu TopMenu(IDM_NEWMENU);\r
+ CMenu* pPopupMenu = TopMenu.GetSubMenu(0);\r
+\r
+ // Start the popup menu\r
+ pPopupMenu->TrackPopupMenuEx(TPM_LEFTALIGN | TPM_LEFTBUTTON | TPM_VERTICAL, rc.left, rc.bottom, this, &tpm);\r
+}\r
+\r
+BOOL CMainMDIFrame::OnCommand(WPARAM wParam, LPARAM lParam)\r
+{\r
+ switch (LOWORD(wParam))\r
+ {\r
+ case IDM_FILE_NEW:\r
+ // For ComCtl versions 4.71 and older\r
+ OnFileNew();\r
+ return TRUE;\r
+ case IDM_FILE_NEWVIEW:\r
+ AddMDIChild(new CMDIChildSimple); // CMDIFrame::RemoveMDIChild deletes this pointer\r
+ return TRUE;\r
+ case IDM_FILE_NEWRECT:\r
+ AddMDIChild(new CMDIChildRect); // CMDIFrame::RemoveMDIChild deletes this pointer\r
+ return TRUE;\r
+ case IDM_FILE_NEWTEXT:\r
+ AddMDIChild(new CMDIChildText); // CMDIFrame::RemoveMDIChild deletes this pointer\r
+ return TRUE;\r
+ case IDM_FILE_NEWMAX:\r
+ AddMDIChild(new CMDIChildMax); // CMDIFrame::RemoveMDIChild deletes this pointer\r
+ return TRUE;\r
+ case IDM_FILE_NEWTREE:\r
+ AddMDIChild(new CMDIChildTreeView); // CMDIFrame::RemoveMDIChild deletes this pointer\r
+ return TRUE;\r
+ case IDM_FILE_NEWLIST:\r
+ AddMDIChild(new CMDIChildListView); // CMDIFrame::RemoveMDIChild deletes this pointer\r
+ return TRUE;\r
+ case IDM_FILE_CLOSE: // Close the active MDI window\r
+ GetActiveMDIChild()->SendMessage(WM_CLOSE, 0L, 0L);\r
+ return TRUE;\r
+ case IDM_FILE_EXIT:\r
+ SendMessage(WM_CLOSE, 0L, 0L);\r
+ return TRUE;\r
+ case IDW_VIEW_STATUSBAR:\r
+ OnViewStatusBar();\r
+ UpdateCheckMarks();\r
+ break;\r
+ case IDW_VIEW_TOOLBAR:\r
+ OnViewToolBar();\r
+ UpdateCheckMarks();\r
+ break;\r
+ case IDW_MDI_ARRANGE:\r
+ MDIIconArrange();\r
+ break;\r
+ case IDW_MDI_CASCADE:\r
+ MDICascade();\r
+ break;\r
+ case IDW_MDI_CLOSEALL:\r
+ RemoveAllMDIChildren();\r
+ break;\r
+ case IDW_MDI_TILE:\r
+ MDITile();\r
+ break;\r
+ default: // Pass to active child...\r
+ {\r
+ if (GetActiveMDIChild())\r
+ GetActiveMDIChild()->SendMessage(WM_COMMAND, wParam, lParam);\r
+ }\r
+ break ;\r
+ case IDM_HELP_ABOUT:\r
+ OnHelp();\r
+ return TRUE;\r
+ }\r
+\r
+ return FALSE;\r
+}\r
+\r
+void CMainMDIFrame::OnCreate()\r
+{\r
+ // OnCreate controls the way the frame is created.\r
+ // Overriding CFrame::Oncreate is optional.\r
+ // The default for the following variables is TRUE\r
+\r
+ // m_bShowIndicatorStatus = FALSE; // Don't show statusbar indicators\r
+ // m_bShowMenuStatus = FALSE; // Don't show toolbar or menu status\r
+ // m_bUseReBar = FALSE; // Don't use rebars\r
+ // m_bUseThemes = FALSE; // Don't use themes\r
+ // m_bUseToolBar = FALSE; // Don't use a toolbar\r
+ // m_bUseCustomDraw = FALSE; // Don't use custom draw for menu items\r
+\r
+ // call the base class function\r
+ CMDIFrame::OnCreate();\r
+}\r
+\r
+LRESULT CMainMDIFrame::OnNotify(WPARAM wParam, LPARAM lParam)\r
+{\r
+ // Notification from our dropdown button is recieved if Comctl32.dll version\r
+ // is 4.70 or later (IE v3 required).\r
+ switch(((LPNMHDR)lParam)->code)\r
+ {\r
+ //Menu for dropdown toolbar button\r
+ case TBN_DROPDOWN:\r
+ {\r
+ if (((LPNMHDR)lParam)->hwndFrom == GetToolBar())\r
+ OnFileNew();\r
+ }\r
+ break;\r
+\r
+ } //switch LPNMHDR\r
+\r
+ return CMDIFrame::OnNotify(wParam, lParam);\r
+}\r
+\r
+void CMainMDIFrame::SetupToolBar()\r
+{\r
+ // Define the resource IDs for the toolbar\r
+ AddToolBarButton( IDM_FILE_NEW );\r
+ AddToolBarButton( IDM_FILE_OPEN, FALSE );\r
+ AddToolBarButton( IDM_FILE_SAVE, FALSE );\r
+ \r
+ AddToolBarButton( 0 ); // Separator\r
+ AddToolBarButton( IDM_EDIT_CUT, FALSE );\r
+ AddToolBarButton( IDM_EDIT_COPY, FALSE );\r
+ AddToolBarButton( IDM_EDIT_PASTE, FALSE );\r
+ \r
+ AddToolBarButton( 0 ); // Separator\r
+ AddToolBarButton( IDM_FILE_PRINT, FALSE );\r
+ \r
+ AddToolBarButton( 0 ); // Separator\r
+ AddToolBarButton( IDM_HELP_ABOUT );\r
+\r
+ // Use larger buttons with seperate imagelists for normal, hot and disabled buttons.\r
+ SetToolBarImages(RGB(192,192,192), IDB_TOOLBAR_NORM, IDB_TOOLBAR_HOT, IDB_TOOLBAR_DIS);\r
+\r
+ // Add some extra icons for menu items\r
+ AddMenuIcon(IDM_FILE_NEWVIEW, ::LoadIcon(GetApp()->GetInstanceHandle(), MAKEINTRESOURCE(IDI_VIEW)));\r
+ AddMenuIcon(IDM_FILE_NEWRECT, ::LoadIcon(GetApp()->GetInstanceHandle(), MAKEINTRESOURCE(IDI_RECT)));\r
+ AddMenuIcon(IDM_FILE_NEWMAX, ::LoadIcon(GetApp()->GetInstanceHandle(), MAKEINTRESOURCE(IDI_MAX)));\r
+ AddMenuIcon(IDM_FILE_NEWTEXT, ::LoadIcon(GetApp()->GetInstanceHandle(), MAKEINTRESOURCE(IDI_TEXT)));\r
+ AddMenuIcon(IDM_FILE_NEWLIST, ::LoadIcon(GetApp()->GetInstanceHandle(), MAKEINTRESOURCE(IDI_FILES)));\r
+ AddMenuIcon(IDM_FILE_NEWTREE, ::LoadIcon(GetApp()->GetInstanceHandle(), MAKEINTRESOURCE(IDI_CLASSES)));\r
+\r
+ // Configure the "New" toolbar button to bring up a menu\r
+ // Setting this style requires comctl32.dll version 4.72 or later\r
+ if (GetComCtlVersion() >= 472)\r
+ {\r
+ GetToolBar().SetButtonStyle(IDM_FILE_NEW, BTNS_WHOLEDROPDOWN);\r
+ }\r
+}\r
+\r
+LRESULT CMainMDIFrame::WndProc(UINT uMsg, WPARAM wParam, LPARAM lParam)\r
+{\r
+// switch (uMsg)\r
+// {\r
+// Add case statements for each messages to be handled here\r
+// }\r
+\r
+// pass unhandled messages on for default processing\r
+ return WndProcDefault(uMsg, wParam, lParam);\r
+}\r
+\r