TabbedViewView.cpp
上传用户:szled88
上传日期:2015-04-09
资源大小:43957k
文件大小:11k
- // TabbedViewView.cpp : implementation of the CTabbedViewView class
- //
- // This file is a part of the XTREME TOOLKIT MFC class library.
- // (c)1998-2008 Codejock Software, All Rights Reserved.
- //
- // THIS SOURCE FILE IS THE PROPERTY OF CODEJOCK SOFTWARE AND IS NOT TO
- // BE RE-DISTRIBUTED BY ANY MEANS WHATSOEVER WITHOUT THE EXPRESSED
- // WRITTEN CONSENT OF CODEJOCK SOFTWARE.
- //
- // THIS SOURCE CODE CAN ONLY BE USED UNDER THE TERMS AND CONDITIONS
- // OUTLINED IN THE XTREME TOOLKIT LICENSE AGREEMENT. CODEJOCK SOFTWARE
- // GRANTS TO YOU (ONE SOFTWARE DEVELOPER) THE LIMITED RIGHT TO USE
- // THIS SOFTWARE ON A SINGLE COMPUTER.
- //
- // CONTACT INFORMATION:
- // support@codejock.com
- // http://www.codejock.com
- //
- //////////////////////////////////////////////////////////////////////
- #include "stdafx.h"
- #include "TabbedView.h"
- #include "TabbedViewDoc.h"
- #include "TabbedViewView.h"
- #include "TabTreeClass.h"
- #include "TabTreeFile.h"
- #include "TabTreeResource.h"
- #ifdef _DEBUG
- #define new DEBUG_NEW
- #undef THIS_FILE
- static char THIS_FILE[] = __FILE__;
- #endif
- /////////////////////////////////////////////////////////////////////////////
- // CTabbedViewView
- IMPLEMENT_DYNCREATE(CTabbedViewView, CXTTabView)
- BEGIN_MESSAGE_MAP(CTabbedViewView, CXTTabView)
- //{{AFX_MSG_MAP(CTabbedViewView)
- ON_WM_CREATE()
- ON_COMMAND(ID_FILE_OPEN, OnFileOpen)
- ON_WM_RBUTTONDOWN()
- ON_WM_CANCELMODE()
- ON_COMMAND(ID_TAB_ACTIVATE, OnTabActivate)
- ON_COMMAND(ID_TAB_CLOSE, OnTabClose)
- ON_COMMAND(ID_TAB_SAVE, OnTabSave)
- ON_COMMAND(ID_TAB_SAVE_AS, OnTabSaveAs)
- ON_COMMAND(ID_TAB_PRINT, OnTabPrint)
- ON_COMMAND(ID_TAB_PRINT_PREVIEW, OnTabPrintPreview)
- ON_WM_TIMER()
- ON_WM_MOUSEMOVE()
- ON_WM_DROPFILES()
- //}}AFX_MSG_MAP
- ON_COMMAND(XT_IDC_TAB_CLOSE, OnCloseTab)
- END_MESSAGE_MAP()
- /////////////////////////////////////////////////////////////////////////////
- // CTabbedViewView construction/destruction
- CTabbedViewView::CTabbedViewView()
- {
- // TODO: add construction code here
- m_iHitTest = -1;
- m_nIDEvent = 20;
- m_bXPBorder = true;
- }
- CTabbedViewView::~CTabbedViewView()
- {
- }
- BOOL CTabbedViewView::PreCreateWindow(CREATESTRUCT& cs)
- {
- // TODO: Modify the Window class or styles here by modifying
- // the CREATESTRUCT cs
- return CXTTabView::PreCreateWindow(cs);
- }
- /////////////////////////////////////////////////////////////////////////////
- // CTabbedViewView diagnostics
- #ifdef _DEBUG
- void CTabbedViewView::AssertValid() const
- {
- CXTTabView::AssertValid();
- }
- void CTabbedViewView::Dump(CDumpContext& dc) const
- {
- CXTTabView::Dump(dc);
- }
- CTabbedViewDoc* CTabbedViewView::GetDocument() // non-debug version is inline
- {
- ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CTabbedViewDoc)));
- return (CTabbedViewDoc*)m_pDocument;
- }
- #endif //_DEBUG
- /////////////////////////////////////////////////////////////////////////////
- // CTabbedViewView message handlers
- int CTabbedViewView::OnCreate(LPCREATESTRUCT lpCreateStruct)
- {
- if (CXTTabView::OnCreate(lpCreateStruct) == -1)
- return -1;
- // Register as a drop target
- m_dropTarget.Register(this);
- DragAcceptFiles();
- // Create the image list used by the tab control.
- if (!m_imageList.Create( IDB_IMAGELIST, 16, 1, RGB( 0x00,0x80,0x80 )))
- {
- TRACE0("Failed to create image list.n");
- return -1;
- }
- // Create the edit control for the edit tab.
- if (!m_editTab.Create(WS_CHILD|WS_VISIBLE,
- CRect(0,0,0,0), this, IDC_EDIT_TAB))
- {
- TRACE0("Failed to create edit control.n");
- return -1;
- }
- // Create the tree control for the file tab
- if (!m_treeTabFile.Create(WS_CHILD|WS_VISIBLE,
- CRect(0,0,0,0), this, IDC_TREE_TAB_FILE))
- {
- TRACE0("Failed to create tree control.n");
- return -1;
- }
- // Create the tree control for the class tab
- if (!m_treeTabClass.Create(WS_CHILD|WS_VISIBLE,
- CRect(0,0,0,0), this, IDC_TREE_TAB_CLASS))
- {
- TRACE0("Failed to create tree control.n");
- return -1;
- }
- // Create the tree control for the resource tab
- if (!m_treeTabResource.Create(WS_CHILD|WS_VISIBLE,
- CRect(0,0,0,0), this, IDC_TREE_TAB_RESOURCE))
- {
- TRACE0("Failed to create tree control.n");
- return -1;
- }
- // Insert the edit control into the tabbed view.
- AddControl(_T("Edit Control"), &m_editTab);
- // Insert the tree controls into the tabbed view.
- AddControl(_T("File Tree"), &m_treeTabFile);
- AddControl(_T("Class Tree"), &m_treeTabClass);
- AddControl(_T("Resource Tree"), &m_treeTabResource);
- // Set the tab controls image list.
- GetTabCtrl().SetImageList(&m_imageList);
- // TODO: uncomment this line if you want the tabs to appear on bottom.
- //ModifyTabStyle(NULL, TCS_BOTTOM);
- // Set the active view to the second tab.
- SetActiveView(1);
- UpdateTabBorders();
- SetTabIcon(3, AfxGetApp()->LoadIcon(IDR_MDITABTYPE));
- return 0;
- }
- void CTabbedViewView::SetTabIcon(int iTab, int iImage)
- {
- TC_ITEM tci;
- tci.mask = TCIF_IMAGE;
- GetTabCtrl().GetItem(iTab, &tci);
- tci.iImage = iImage;
- GetTabCtrl().SetItem(iTab, &tci);
- }
- void CTabbedViewView::SetTabIcon(int iTab, HICON hIcon)
- {
- CImageList* pImageList = GetTabCtrl().GetImageList();
- SetTabIcon(iTab, pImageList->Add(hIcon));
- }
- void CTabbedViewView::OnSelChanging()
- {
- CXTTabView::OnSelChanging();
- // TODO: Add your code to handle tab selection.
- }
- void CTabbedViewView::OnSelChange()
- {
- CXTTabView::OnSelChange();
- // TODO: Add your code to handle tab selection.
- }
- void CTabbedViewView::OnInitialUpdate()
- {
- CXTTabView::OnInitialUpdate();
-
- // TODO: Add your specialized code here and/or call the base class
-
- }
- void CTabbedViewView::OnFileOpen()
- {
- // TODO: Add your command handler code here
- }
- void CTabbedViewView::OnRButtonDown(UINT /*nFlags*/, CPoint point)
- {
- // Get the tab index based upon the cursor position.
- m_iHitTest = GetTabFromPoint(point);
- if (m_iHitTest == -1)
- return;
- CMenu popupMenu;
- VERIFY(popupMenu.CreatePopupMenu());
- popupMenu.AppendMenu(MF_STRING, ID_TAB_ACTIVATE, _T("Active View Tab"));
- popupMenu.AppendMenu(MF_SEPARATOR);
- popupMenu.AppendMenu(MF_STRING, ID_TAB_CLOSE, _T("&Close"));
- popupMenu.AppendMenu(MF_STRING, ID_TAB_SAVE, _T("&SavetCtrl+S"));
- popupMenu.AppendMenu(MF_STRING, ID_TAB_SAVE_AS, _T("Save &As..."));
- popupMenu.AppendMenu(MF_SEPARATOR);
- popupMenu.AppendMenu(MF_STRING, ID_TAB_PRINT, _T("&PrinttCtrl+P"));
- popupMenu.AppendMenu(MF_STRING, ID_TAB_PRINT_PREVIEW, _T("Print Pre&view"));
- ::SetMenuDefaultItem(popupMenu.m_hMenu, 0, TRUE);
- CPoint pt = point;
- ClientToScreen(&pt);
- popupMenu.TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON,
- pt.x, pt.y, this);
- popupMenu.DestroyMenu();
- }
- void CTabbedViewView::OnCancelMode()
- {
- CXTTabView::OnCancelMode();
-
- // TODO: Add your message handler code here
-
- }
- void CTabbedViewView::OnTabActivate()
- {
- // TRACE0("CTabbedViewView::OnTabActivate()n");
- SetActiveView(m_iHitTest);
- }
- void CTabbedViewView::OnTabClose()
- {
- // TRACE0("CTabbedViewView::OnTabClose()n");
- if (GetTabCtrl().GetItemCount() == 1)
- {
- AfxMessageBox( IDS_CANNOTDEL );
- }
- else
- {
- DeleteView(m_iHitTest);
- }
- }
- void CTabbedViewView::OnTabSave()
- {
- // TRACE0("CTabbedViewView::OnTabSave()n");
- GetView(m_iHitTest)->SendMessage(WM_COMMAND, ID_FILE_SAVE);
- }
- void CTabbedViewView::OnTabSaveAs()
- {
- // TRACE0("CTabbedViewView::OnTabSaveAs()n");
- GetView(m_iHitTest)->SendMessage(WM_COMMAND, ID_FILE_SAVE_AS);
- }
- void CTabbedViewView::OnTabPrint()
- {
- // TRACE0("CTabbedViewView::OnTabPrint()n");
- GetView(m_iHitTest)->SendMessage(WM_COMMAND, ID_FILE_PRINT);
- }
- void CTabbedViewView::OnTabPrintPreview()
- {
- // TRACE0("CTabbedViewView::OnTabPrintPreview()n");
- GetView(m_iHitTest)->SendMessage(WM_COMMAND, ID_FILE_PRINT_PREVIEW);
- }
- void CTabbedViewView::OnTimer(UINT_PTR nIDEvent)
- {
- if (m_nIDEvent == nIDEvent)
- {
- CPoint point;
- ::GetCursorPos(&point);
- ScreenToClient(&point);
- if (m_point == point)
- {
- CTabCtrl& tabCtrl = GetTabCtrl();
- CRect rcItem;
- int iItem;
- for (iItem = 0; iItem < tabCtrl.GetItemCount(); ++iItem )
- {
- tabCtrl.GetItemRect(iItem, &rcItem);
- if (rcItem.PtInRect(m_point) && tabCtrl.GetCurSel() != iItem)
- {
- SetActiveView(iItem);
- break;
- }
- }
- }
-
- KillTimer(m_nIDEvent);
- }
- else
- {
- CXTTabView::OnTimer(nIDEvent);
- }
- }
- void CTabbedViewView::OnMouseMove(UINT nFlags, CPoint point)
- {
- CXTTabView::OnMouseMove(nFlags, point);
- m_point = point;
- SetTimer(m_nIDEvent, 2500, NULL);
- }
- void CTabbedViewView::UpdateTabBorders()
- {
- BOOL bIsOfficeTheme = XTThemeManager()->GetTheme() != xtThemeDefault;
- DWORD dwAdd = bIsOfficeTheme ? 0 : WS_EX_CLIENTEDGE;
- DWORD dwRemove = bIsOfficeTheme ? WS_EX_CLIENTEDGE : 0;
- if (::IsWindow(m_editTab.m_hWnd)) {
- m_editTab.ModifyStyleEx(dwRemove, dwAdd);
- }
- if (::IsWindow(m_treeTabFile.m_hWnd)) {
- m_treeTabFile.ModifyStyleEx(dwRemove, dwAdd);
- }
- if (::IsWindow(m_treeTabClass.m_hWnd)) {
- m_treeTabClass.ModifyStyleEx(dwRemove, dwAdd);
- }
- if (::IsWindow(m_treeTabResource.m_hWnd)) {
- m_treeTabResource.ModifyStyleEx(dwRemove, dwAdd);
- }
- CRect r;
- GetWindowRect(&r);
- SetWindowPos(NULL, 0,0,r.Width()+1,r.Height(),
- SWP_FRAMECHANGED|SWP_NOMOVE);
-
- SetWindowPos(NULL, 0,0,r.Width(),r.Height(),
- SWP_FRAMECHANGED|SWP_NOMOVE);
- }
- void CTabbedViewView::OnCloseTab()
- {
- if (GetTabCtrl().GetItemCount() == 1)
- {
- AfxMessageBox( IDS_CANNOTDEL );
- }
- else
- {
- DeleteView(GetTabCtrl().GetCurSel());
- }
- }
- DROPEFFECT CTabbedViewView::OnDragOver(COleDataObject* pDataObject, DWORD dwKeyState, CPoint point)
- {
- ::GetCursorPos(&point);
- ScreenToClient(&point);
- CTabCtrl& tabCtrl = GetTabCtrl();
- CRect rcItem;
- for (int iItem = 0; iItem < tabCtrl.GetItemCount(); ++iItem )
- {
- tabCtrl.GetItemRect(iItem, &rcItem);
- if (rcItem.PtInRect(point) && tabCtrl.GetCurSel() != iItem)
- {
- SetActiveView(iItem);
- break;
- }
- }
- return CXTTabView::OnDragOver(pDataObject, dwKeyState, point);
- }
- void CTabbedViewView::OnDropFiles(HDROP hDropInfo)
- {
- CPoint point;
- ::GetCursorPos(&point);
- ScreenToClient(&point);
- CTabCtrl& tabCtrl = GetTabCtrl();
- CRect rcItem;
- for (int iItem = 0; iItem < tabCtrl.GetItemCount(); ++iItem )
- {
- tabCtrl.GetItemRect(iItem, &rcItem);
- if (rcItem.PtInRect(point))
- {
- SetActiveView(iItem);
- CWnd* pView = GetView(iItem);
- if (pView && ::IsWindow(pView->m_hWnd))
- pView->PostMessage(WM_DROPFILES, (WPARAM)hDropInfo, 0L);
- break;
- }
- }
- CXTTabView::OnDropFiles(hDropInfo);
- }