--- /dev/null
+////////////////////////////////////////////////////\r
+// Mainfrm.cpp - definitions for the CMainFrame class\r
+\r
+#include "stdafx.h"\r
+#include "mainfrm.h"\r
+#include "resource.h"\r
+\r
+\r
+CMainFrame::CMainFrame() : m_bShowHidden(FALSE)\r
+{\r
+ // Set m_MainView as the view window of the frame\r
+ SetView(m_LeftPane);\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++\\Explorer Sample"));\r
+}\r
+\r
+CMainFrame::~CMainFrame()\r
+{\r
+}\r
+\r
+void CMainFrame::DoPopupMenu()\r
+{\r
+ // Creates the popup menu for the "View Menu" toolbar button\r
+\r
+ // Position the popup menu\r
+ CToolBar& TB = GetToolBar();\r
+ CRect rc = TB.GetItemRect(TB.CommandToIndex(IDM_VIEWMENU));\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_VIEWMENU);\r
+ CMenu* pPopupMenu = TopMenu.GetSubMenu(0);\r
+\r
+ // Put a radio check in the currently checked item\r
+ MENUITEMINFO mii = {0};\r
+ for (int i = 3 ; i < 7 ; i++)\r
+ {\r
+ ZeroMemory(&mii, GetSizeofMenuItemInfo());\r
+ mii.cbSize = GetSizeofMenuItemInfo();\r
+\r
+ mii.fMask = MIIM_STATE | MIIM_ID;\r
+ GetMenuItemInfo(GetSubMenu(GetFrameMenu(), 1), i, TRUE, &mii );\r
+ if (mii.fState & MFS_CHECKED)\r
+ TopMenu.CheckMenuRadioItem(IDM_VIEW_SMALLICON, IDM_VIEW_REPORT, mii.wID, 0);\r
+ }\r
+\r
+ // Start the popup menu\r
+ pPopupMenu->TrackPopupMenuEx(TPM_LEFTALIGN | TPM_LEFTBUTTON | TPM_VERTICAL, rc.left, rc.bottom, this, &tpm);\r
+}\r
+\r
+void CMainFrame::OnInitialUpdate()\r
+{\r
+ // Add the right window pane\r
+ int Width = (int) (GetWindowRect().Width() * 0.7);\r
+ DWORD dwDockStyle = DS_DOCKED_RIGHT | DS_NO_UNDOCK | DS_NO_CAPTION;\r
+ m_RightPane = (CRightPane*)m_LeftPane.AddDockedChild(new CRightPane, dwDockStyle, Width);\r
+\r
+ // All windows are now created, so populate the treeview\r
+ GetTreeView()->GetRootItems();\r
+\r
+ // Uncheck the hidden menu item\r
+ GetFrameMenu().CheckMenuItem(IDM_SHOW_HIDDEN, MF_UNCHECKED);\r
+\r
+ // Place Radio button in view menu\r
+ CMenu* pViewMenu = GetFrameMenu().GetSubMenu(1);\r
+ pViewMenu->CheckMenuRadioItem(IDM_VIEW_SMALLICON, IDM_VIEW_REPORT, IDM_VIEW_REPORT, 0);\r
+\r
+ // Uncomment the following to use a hash bar and disable of auto resizing \r
+ // m_LeftPane.SetDragAutoResize(FALSE);\r
+}\r
+\r
+void CMainFrame::OnClose()\r
+{\r
+ // Destroying the TreeView triggers shutdown of the Treeview thread.\r
+ GetTreeView()->Destroy();\r
+\r
+ CFrame::OnClose();\r
+}\r
+\r
+BOOL CMainFrame::OnCommand(WPARAM wParam, LPARAM lParam)\r
+{\r
+ UNREFERENCED_PARAMETER(lParam);\r
+\r
+ // Handle the the View submenu\r
+ CMenu* pViewMenu = GetFrameMenu().GetSubMenu(1);\r
+\r
+ switch (LOWORD(wParam))\r
+ {\r
+ case IDM_FILE_EXIT:\r
+ ::PostMessage(m_hWnd, WM_CLOSE, 0, 0);\r
+ return TRUE;\r
+ case IDM_HELP_ABOUT:\r
+ OnHelp();\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_VIEW_LARGEICON:\r
+ GetListView()->ViewLargeIcons();\r
+ pViewMenu->CheckMenuRadioItem(IDM_VIEW_SMALLICON, IDM_VIEW_REPORT, IDM_VIEW_LARGEICON, 0);\r
+ return TRUE;\r
+ case IDM_VIEW_SMALLICON:\r
+ GetListView()->ViewSmallIcons();\r
+ pViewMenu->CheckMenuRadioItem(IDM_VIEW_SMALLICON, IDM_VIEW_REPORT, IDM_VIEW_SMALLICON, 0);\r
+ return TRUE;\r
+ case IDM_VIEW_LIST:\r
+ GetListView()->ViewList();\r
+ pViewMenu->CheckMenuRadioItem(IDM_VIEW_SMALLICON, IDM_VIEW_REPORT, IDM_VIEW_LIST, 0);\r
+ return TRUE;\r
+ case IDM_VIEW_REPORT:\r
+ GetListView()->ViewReport();\r
+ pViewMenu->CheckMenuRadioItem(IDM_VIEW_SMALLICON, IDM_VIEW_REPORT, IDM_VIEW_REPORT, 0);\r
+ return TRUE;\r
+ case IDM_SHOW_HIDDEN:\r
+ m_bShowHidden = !m_bShowHidden;\r
+ pViewMenu->CheckMenuItem(IDM_SHOW_HIDDEN, (TRUE == m_bShowHidden)? MF_CHECKED : MF_UNCHECKED);\r
+\r
+ // Refresh the Listview display\r
+ GetListView()->DoDisplay();\r
+ return TRUE;\r
+ case IDM_VIEWMENU:\r
+ // This Command is recieved if Comctl32.dll version is below 4.7\r
+ DoPopupMenu();\r
+ return TRUE;\r
+ } // switch cmd\r
+\r
+ return FALSE;\r
+\r
+} // CMainFrame::OnCommand(...)\r
+\r
+void CMainFrame::OnCreate()\r
+{\r
+ // call the base OnCreate function\r
+ CFrame::OnCreate();\r
+}\r
+\r
+LRESULT CMainFrame::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().GetHwnd())\r
+ DoPopupMenu();\r
+ }\r
+\r
+ } //switch LPNMHDR\r
+\r
+ return CFrame::OnNotify(wParam, lParam);\r
+}\r
+\r
+void CMainFrame::SetupToolBar()\r
+{\r
+ // Define our toolbar data\r
+ AddToolBarButton( IDM_FILE_NEW , FALSE, _T("New") );\r
+ AddToolBarButton( IDM_FILE_OPEN , FALSE, _T("Open") );\r
+ AddToolBarButton( IDM_FILE_SAVE , FALSE, _T("Save") );\r
+ \r
+ AddToolBarButton( 0 ); // Separator\r
+ AddToolBarButton( IDM_EDIT_CUT , FALSE, _T("Cut") );\r
+ AddToolBarButton( IDM_EDIT_COPY , FALSE, _T("Copy") );\r
+ AddToolBarButton( IDM_EDIT_PASTE, FALSE, _T("Paste") );\r
+ AddToolBarButton( IDM_FILE_PRINT, FALSE, _T("Print") );\r
+ \r
+ AddToolBarButton( 0 ); // Separator\r
+ AddToolBarButton( IDM_VIEWMENU, TRUE, _T("View Menu"));\r
+ \r
+ AddToolBarButton( 0 ); // Separator\r
+ AddToolBarButton( IDM_HELP_ABOUT, TRUE, _T("About") );\r
+\r
+ // Use larger buttons\r
+ SetToolBarImages(RGB(192,192,192), IDB_TOOLBAR_NORM, IDB_TOOLBAR_HOT, IDB_TOOLBAR_DIS);\r
+\r
+ // Configure the ViewMenu button to bring up a menu\r
+ // Setting this style requires comctl32.dll version 4.72 or later\r
+ if (GetComCtlVersion() >= 472)\r
+ {\r
+ CToolBar& TB = GetToolBar();\r
+ TB.SetButtonStyle(IDM_VIEWMENU, BTNS_WHOLEDROPDOWN);\r
+ }\r
+}\r
+\r
+LRESULT CMainFrame::WndProc(UINT uMsg, WPARAM wParam, LPARAM lParam)\r
+{\r
+ switch (uMsg)\r
+ {\r
+ case WM_CLOSE:\r
+ OnClose();\r
+ break;\r
+ }\r
+\r
+ // pass any unhandled messages on for default processing\r
+ return WndProcDefault(uMsg, wParam, lParam);\r
+}\r
+\r