#include "stdafx.h" #include "MainFrm.h" #include "ClassView.h" #include "Resource.h" #include "MakeSetConfig.h" ////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// #define EDIT_VIEW_ID 2 CClassView::CClassView() { m_nCurrSort = ID_SORTING_GROUPBYTYPE; m_PreviewProp = NULL; } CClassView::~CClassView() { } BEGIN_MESSAGE_MAP(CClassView, CDockablePane) ON_WM_CREATE() ON_WM_SIZE() ON_WM_CONTEXTMENU() ON_COMMAND(ID_NEW_FOLDER, OnNewFolder) ON_WM_PAINT() ON_WM_SETFOCUS() ON_EN_CHANGE(EDIT_VIEW_ID, OnChangeEdit) ON_COMMAND(ID_EDIT_SELECT_ALL, &CClassView::OnEditSelectAll) ON_COMMAND(ID_EDIT_CUT, &CClassView::OnEditCut) ON_COMMAND(ID_EDIT_PASTE, &CClassView::OnEditPaste) ON_COMMAND(ID_EDIT_UNDO, &CClassView::OnEditUndo) ON_COMMAND(ID_EDIT_COPY, &CClassView::OnEditCopy) END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CClassView message handlers int CClassView::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CDockablePane::OnCreate(lpCreateStruct) == -1) return -1; CRect rectDummy; rectDummy.SetRectEmpty(); // Create views: const DWORD dwViewStyle = WS_CHILD | WS_VISIBLE | ES_MULTILINE | ES_AUTOHSCROLL | ES_WANTRETURN | WS_VSCROLL | WS_HSCROLL; if (!m_wndEdit.Create(dwViewStyle, rectDummy, this, EDIT_VIEW_ID)) { TRACE0("Failed to create Class View\n"); return -1; // fail to create } // Load images: m_wndToolBar.Create(this, AFX_DEFAULT_TOOLBAR_STYLE, IDR_SORT); m_wndToolBar.LoadToolBar(IDR_SORT, 0, 0, TRUE /* Is locked */); OnChangeVisualStyle(); m_wndToolBar.SetPaneStyle(m_wndToolBar.GetPaneStyle() | CBRS_TOOLTIPS | CBRS_FLYBY); m_wndToolBar.SetPaneStyle(m_wndToolBar.GetPaneStyle() & ~(CBRS_GRIPPER | CBRS_SIZE_DYNAMIC | CBRS_BORDER_TOP | CBRS_BORDER_BOTTOM | CBRS_BORDER_LEFT | CBRS_BORDER_RIGHT)); m_wndToolBar.SetOwner(this); // All commands will be routed via this control , not via the parent frame: m_wndToolBar.SetRouteCommandsViaFrame(FALSE); m_hAccel = LoadAccelerators(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDR_MAINFRAME)); LOGFONT lf; afxGlobalData.fontRegular.GetLogFont(&lf); if (afxGlobalData.bIsWindows7) { lstrcpy(lf.lfFaceName, _T("Consolas")); } else { lstrcpy(lf.lfFaceName, _T("Courier New")); } m_fntEdit.CreateFontIndirect(&lf); m_wndEdit.SetFont(&m_fntEdit); m_wndEdit.SetLimitText(UINT_MAX); return 0; } void CClassView::OnSize(UINT nType, int cx, int cy) { CDockablePane::OnSize(nType, cx, cy); AdjustLayout(); } void CClassView::OnContextMenu(CWnd* pWnd, CPoint point) { theApp.GetContextMenuManager()->ShowPopupMenu(IDR_POPUP_EDIT, point.x, point.y, this, TRUE); } void CClassView::AdjustLayout() { if (GetSafeHwnd() == NULL) { return; } CRect rectClient; GetClientRect(rectClient); int cyTlb = m_wndToolBar.CalcFixedLayout(FALSE, TRUE).cy; m_wndToolBar.SetWindowPos(NULL, rectClient.left, rectClient.top, rectClient.Width(), cyTlb, SWP_NOACTIVATE | SWP_NOZORDER); m_wndEdit.SetWindowPos(NULL, rectClient.left + 1, rectClient.top + cyTlb + 1, rectClient.Width() - 2, rectClient.Height() - cyTlb - 2, SWP_NOACTIVATE | SWP_NOZORDER); } BOOL CClassView::PreTranslateMessage(MSG* pMsg) { if (pMsg->message == WM_KEYDOWN) { if (TranslateAccelerator(m_hWnd, m_hAccel, pMsg)) { return TRUE; } } return CDockablePane::PreTranslateMessage(pMsg); } void CClassView::OnNewFolder() { if (m_PreviewProp) { m_PreviewProp->ResetOriginalValue(); m_wndEdit.SetWindowText(CString(m_PreviewProp->GetValue())); } } void CClassView::OnPaint() { CPaintDC dc(this); // device context for painting CRect rectTree; m_wndEdit.GetWindowRect(rectTree); ScreenToClient(rectTree); rectTree.InflateRect(1, 1); dc.Draw3dRect(rectTree, ::GetSysColor(COLOR_3DSHADOW), ::GetSysColor(COLOR_3DSHADOW)); } void CClassView::OnSetFocus(CWnd* pOldWnd) { CDockablePane::OnSetFocus(pOldWnd); m_wndEdit.SetFocus(); } void CClassView::OnChangeVisualStyle() { m_ClassViewImages.DeleteImageList(); UINT uiBmpId = theApp.m_bHiColorIcons ? IDB_CLASS_VIEW_24 : IDB_CLASS_VIEW; CBitmap bmp; if (!bmp.LoadBitmap(uiBmpId)) { TRACE(_T("Can't load bitmap: %x\n"), uiBmpId); ASSERT(FALSE); return; } BITMAP bmpObj; bmp.GetBitmap(&bmpObj); UINT nFlags = ILC_MASK; nFlags |= (theApp.m_bHiColorIcons) ? ILC_COLOR24 : ILC_COLOR4; m_ClassViewImages.Create(16, bmpObj.bmHeight, nFlags, 0, 0); m_ClassViewImages.Add(&bmp, RGB(255, 0, 0)); m_wndToolBar.CleanUpLockedImages(); m_wndToolBar.LoadBitmap(theApp.m_bHiColorIcons ? IDB_SORT_24 : IDR_SORT, 0, 0, TRUE /* Locked */); } void CClassView::SetPreviewProp(CMFCPropertyGridProperty* pProp) { if (m_PreviewProp == pProp) { return; } else { m_PreviewProp = pProp; if (m_PreviewProp) { m_wndEdit.SetWindowText(CString(m_PreviewProp->GetValue())); } else { m_wndEdit.SetWindowText(_T("")); } } } void CClassView::RefreshPreview() { if (m_PreviewProp) { CString strValue; m_wndEdit.GetWindowText(strValue); CString strNewValue(m_PreviewProp->GetValue()); if (strNewValue.CompareNoCase(strValue) != 0) { m_wndEdit.SetWindowText(strNewValue); } } } void CClassView::OnChangeEdit() { if (m_PreviewProp) { CString strValue; m_wndEdit.GetWindowText(strValue); m_PreviewProp->SetValue(strValue); if (!m_PreviewProp->IsModified()) { ((CMainFrame*)AfxGetMainWnd())->GetPropertiesWnd()->SetPropModifiedFlag(m_PreviewProp); } } } void CClassView::OnEditSelectAll() { m_wndEdit.SetSel(0, -1); } void CClassView::OnEditCut() { m_wndEdit.Cut(); } void CClassView::OnEditPaste() { m_wndEdit.Paste(); } void CClassView::OnEditUndo() { m_wndEdit.Undo(); } void CClassView::OnEditCopy() { m_wndEdit.Copy(); }