StatusBarView.cpp
上传用户:szled88
上传日期:2015-04-09
资源大小:43957k
文件大小:4k
源码类别:

对话框与窗口

开发平台:

Visual C++

  1. // StatusBarView.cpp : implementation of the CStatusBarView class
  2. //
  3. #include "stdafx.h"
  4. #include "StatusBar.h"
  5. #include "StatusBarDoc.h"
  6. #include "StatusBarView.h"
  7. #include "MainFrm.h"
  8. #ifdef _DEBUG
  9. #define new DEBUG_NEW
  10. #undef THIS_FILE
  11. static char THIS_FILE[] = __FILE__;
  12. #endif
  13. /////////////////////////////////////////////////////////////////////////////
  14. // CStatusBarView
  15. IMPLEMENT_DYNCREATE(CStatusBarView, CView)
  16. BEGIN_MESSAGE_MAP(CStatusBarView, CView)
  17. //{{AFX_MSG_MAP(CStatusBarView)
  18. // NOTE - the ClassWizard will add and remove mapping macros here.
  19. //    DO NOT EDIT what you see in these blocks of generated code!
  20. //}}AFX_MSG_MAP
  21. // Standard printing commands
  22. ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
  23. ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
  24. ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
  25. ON_NOTIFY(XTP_SBN_SCROLL, ID_INDICATOR_ZOOMSLIDER, OnZoomSliderScroll)
  26. ON_COMMAND(ID_INDICATOR_ZOOM, OnZoomIndicator)
  27. END_MESSAGE_MAP()
  28. /////////////////////////////////////////////////////////////////////////////
  29. // CStatusBarView construction/destruction
  30. CStatusBarView::CStatusBarView()
  31. {
  32. CXTPPaintManager::CNonClientMetrics ncm;
  33. ncm.lfMenuFont.lfWeight = FW_BOLD;
  34. m_font.CreateFontIndirect(&ncm.lfMenuFont);
  35. m_nZoom = 100;
  36. }
  37. CStatusBarView::~CStatusBarView()
  38. {
  39. }
  40. BOOL CStatusBarView::PreCreateWindow(CREATESTRUCT& cs)
  41. {
  42. // TODO: Modify the Window class or styles here by modifying
  43. //  the CREATESTRUCT cs
  44. return CView::PreCreateWindow(cs);
  45. }
  46. /////////////////////////////////////////////////////////////////////////////
  47. // CStatusBarView drawing
  48. void CStatusBarView::OnDraw(CDC* pDC)
  49. {
  50. CStatusBarDoc* pDoc = GetDocument();
  51. ASSERT_VALID(pDoc);
  52. CXTPFontDC fontDC(pDC, &m_font);
  53. pDC->SetBkMode(TRANSPARENT);
  54. // TODO: add draw code for native data here
  55. CMainFrame* pFrame = DYNAMIC_DOWNCAST(CMainFrame, GetParentFrame());
  56. if (pFrame && !pFrame->m_strMessage.IsEmpty())
  57. {
  58. pDC->TextOut(10, 10, pFrame->m_strMessage);
  59. }
  60. CString strZoom;
  61. strZoom.Format(_T("%i%%"), m_nZoom);
  62. pDC->TextOut(10, 40, strZoom);
  63. }
  64. /////////////////////////////////////////////////////////////////////////////
  65. // CStatusBarView printing
  66. BOOL CStatusBarView::OnPreparePrinting(CPrintInfo* pInfo)
  67. {
  68. // default preparation
  69. return DoPreparePrinting(pInfo);
  70. }
  71. void CStatusBarView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
  72. {
  73. // TODO: add extra initialization before printing
  74. }
  75. void CStatusBarView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
  76. {
  77. // TODO: add cleanup after printing
  78. }
  79. /////////////////////////////////////////////////////////////////////////////
  80. // CStatusBarView diagnostics
  81. #ifdef _DEBUG
  82. void CStatusBarView::AssertValid() const
  83. {
  84. CView::AssertValid();
  85. }
  86. void CStatusBarView::Dump(CDumpContext& dc) const
  87. {
  88. CView::Dump(dc);
  89. }
  90. CStatusBarDoc* CStatusBarView::GetDocument() // non-debug version is inline
  91. {
  92. ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CStatusBarDoc)));
  93. return (CStatusBarDoc*)m_pDocument;
  94. }
  95. #endif //_DEBUG
  96. /////////////////////////////////////////////////////////////////////////////
  97. // CStatusBarView message handlers
  98. void CStatusBarView::OnZoomSliderScroll(NMHDR* pNMHDR, LRESULT* pResult)
  99. {
  100. NMXTPSCROLL* pNMScroll = (NMXTPSCROLL*)pNMHDR;
  101. CXTPStatusBarSliderPane* pPane = DYNAMIC_DOWNCAST(CXTPStatusBarSliderPane, pNMScroll->pSender);
  102. if (!pPane)
  103. return;
  104. int nZoom = m_nZoom;
  105. switch (pNMScroll->nSBCode)
  106. {
  107. case SB_TOP: nZoom = 0; break;
  108. case SB_BOTTOM: nZoom = 200; break;
  109. case SB_LINEUP: nZoom = max(((nZoom / 10) - 1) * 10, 0); break;
  110. case SB_LINEDOWN: nZoom = min(((nZoom / 10) + 1) * 10, 200); break;
  111. case SB_THUMBTRACK: nZoom = pNMScroll->nPos; break;
  112. case SB_PAGEUP: nZoom = max(nZoom - 10, 0); break;
  113. case SB_PAGEDOWN: nZoom = min(nZoom + 10, 200); break;
  114. }
  115. if (nZoom == m_nZoom)
  116. return;
  117. m_nZoom = nZoom;
  118. pPane->SetPos(nZoom);
  119. CXTPStatusBar* pStatusBar = pPane->GetStatusBar();
  120. CXTPStatusBarPane* pPaneZoomIndicator = pStatusBar->FindPane(ID_INDICATOR_ZOOM);
  121. if (pPaneZoomIndicator)
  122. {
  123. CString strZoom;
  124. strZoom.Format(_T("%i%%"), m_nZoom);
  125. pPaneZoomIndicator->SetText(strZoom);
  126. }
  127. Invalidate(TRUE);
  128. }
  129. void CStatusBarView::OnZoomIndicator()
  130. {
  131. AfxMessageBox(_T("Zoom dialog box"));
  132. }