home *** CD-ROM | disk | FTP | other *** search
/ Mastering MFC Development / MMD.ISO / samples / c05 / dlgbars / dlgbarsview.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  1997-02-20  |  3.8 KB  |  150 lines

  1. // DlgBarsView.cpp : implementation of the CDlgBarsView class
  2. //
  3.  
  4. #include "stdafx.h"
  5. #include "DlgBars.h"
  6.  
  7. #include "DlgBarsDoc.h"
  8. #include "DlgBarsView.h"
  9.  
  10. #include "mainfrm.h"
  11.  
  12. #ifdef _DEBUG
  13. #define new DEBUG_NEW
  14. #undef THIS_FILE
  15. static char THIS_FILE[] = __FILE__;
  16. #endif
  17.  
  18. const COLORREF BLACK=RGB(0,0,0);
  19. const COLORREF RED=RGB(255,0,0);
  20. const COLORREF GREEN=RGB(0,255,0);
  21. const COLORREF BLUE=RGB(0,0,255);
  22.  
  23. /////////////////////////////////////////////////////////////////////////////
  24. // CDlgBarsView
  25.  
  26. IMPLEMENT_DYNCREATE(CDlgBarsView, CView)
  27.  
  28. BEGIN_MESSAGE_MAP(CDlgBarsView, CView)
  29.     //{{AFX_MSG_MAP(CDlgBarsView)
  30.     ON_CBN_SELCHANGE(IDC_LIST_COLORS, OnSelchangeListColors)
  31.     //}}AFX_MSG_MAP
  32.     ON_COMMAND_RANGE(ID_COLORS_BLACK, ID_COLORS_BLUE, OnColors)
  33.     ON_UPDATE_COMMAND_UI_RANGE(ID_COLORS_BLACK, ID_COLORS_BLUE, OnUpdateColors)
  34. END_MESSAGE_MAP()
  35.  
  36. /////////////////////////////////////////////////////////////////////////////
  37. // CDlgBarsView construction/destruction
  38.  
  39. CDlgBarsView::CDlgBarsView()
  40. {
  41. }
  42.  
  43. CDlgBarsView::~CDlgBarsView()
  44. {
  45. }
  46.  
  47. BOOL CDlgBarsView::PreCreateWindow(CREATESTRUCT& cs)
  48. {
  49.     return CView::PreCreateWindow(cs);
  50. }
  51.  
  52. /////////////////////////////////////////////////////////////////////////////
  53. // CDlgBarsView drawing
  54.  
  55. void CDlgBarsView::OnDraw(CDC* pDC)
  56. {
  57.     CDlgBarsDoc* pDoc = GetDocument();
  58.     ASSERT_VALID(pDoc);
  59.  
  60.     CRect r;
  61.     GetClientRect(&r);
  62.     int x = r.right / 2, y = r.bottom / 2;
  63.  
  64.     pDC->SetTextColor(pDoc->GetColor());
  65.     pDC->SetTextAlign (TA_CENTER | TA_BASELINE);
  66.     pDC->TextOut (x, y, pDoc->GetPhrase());
  67. }
  68.  
  69. /////////////////////////////////////////////////////////////////////////////
  70. // CDlgBarsView diagnostics
  71.  
  72. #ifdef _DEBUG
  73. void CDlgBarsView::AssertValid() const
  74. {
  75.     CView::AssertValid();
  76. }
  77.  
  78. void CDlgBarsView::Dump(CDumpContext& dc) const
  79. {
  80.     CView::Dump(dc);
  81. }
  82.  
  83. CDlgBarsDoc* CDlgBarsView::GetDocument() // non-debug version is inline
  84. {
  85.     ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CDlgBarsDoc)));
  86.     return (CDlgBarsDoc*)m_pDocument;
  87. }
  88. #endif //_DEBUG
  89.  
  90. /////////////////////////////////////////////////////////////////////////////
  91. // CDlgBarsView message handlers
  92. void CDlgBarsView::OnColors(UINT nID)
  93. {
  94.     CDlgBarsDoc* pDoc = GetDocument();
  95.     ASSERT_VALID(pDoc);
  96.  
  97.     pDoc->SetColor(IDtoColorRef(nID));
  98.  
  99.     // The view needs a pointer to the dialog bar's combo box.
  100.     // since the dialog bar is a member of the main frame class,
  101.     // we must first obtain a pointer to the main frame object.
  102.     CMainFrame * cmf = (CMainFrame *)AfxGetMainWnd();
  103.     CComboBox * p_cb = 
  104.         (CComboBox *)cmf->m_wndDialogBar.GetDlgItem(IDC_LIST_COLORS);
  105.  
  106.     p_cb->SetCurSel(nID - ID_COLORS_BLACK);
  107.  
  108.     pDoc->UpdateAllViews(NULL);
  109. }
  110.  
  111. void CDlgBarsView::OnUpdateColors(CCmdUI* pCmdUI)
  112. {
  113.     CDlgBarsDoc* pDoc = GetDocument();
  114.     ASSERT_VALID(pDoc);
  115.  
  116.     pCmdUI->Enable(pDoc->GetColor() != IDtoColorRef(pCmdUI->m_nID));
  117. }
  118.  
  119. // This function converts one of the 4 Command IDs to a COLORREF value.
  120. COLORREF CDlgBarsView::IDtoColorRef(int nID)
  121. {
  122.     switch (nID)
  123.     {
  124.         case ID_COLORS_RED:
  125.             return RED;
  126.         case ID_COLORS_GREEN:
  127.             return GREEN;        
  128.         case ID_COLORS_BLUE:
  129.             return BLUE;
  130.         default:
  131.             return BLACK;        
  132.     }
  133. }
  134.  
  135. // This function handles the combo box on the dialog bar. This function could 
  136. // just as easily have been placed in the CMainFrame class. Placing this function
  137. // in the view class places it close to all other command handlers, which generally
  138. // need access to the document class.
  139. void CDlgBarsView::OnSelchangeListColors() 
  140. {
  141.     CMainFrame * cmf = (CMainFrame *)AfxGetMainWnd();
  142.     CComboBox * p_cb = (CComboBox *)cmf->m_wndDialogBar.GetDlgItem(IDC_LIST_COLORS);
  143.  
  144.     // Convert 0-3 to ID_COLORS_BLACK - ID_COLORS_BLUE, 
  145.     // then call the color menu's command handler
  146.     
  147.     WPARAM wParam = p_cb->GetCurSel() + ID_COLORS_BLACK;
  148.     this->SendMessage(WM_COMMAND, wParam);
  149. }
  150.