home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Windows Gam…ming Gurus (2nd Edition) / Disc2.iso / msdn_vcb / samples / vc98 / mfc / database / mdibind / mainfrm.cpp < prev    next >
C/C++ Source or Header  |  1998-03-26  |  5KB  |  183 lines

  1. // MainFrm.cpp : implementation of the CMainFrame class
  2. //
  3. // This is a part of the Microsoft Foundation Classes C++ library.
  4. // Copyright (C) 1992-1998 Microsoft Corporation
  5. // All rights reserved.
  6. //
  7. // This source code is only intended as a supplement to the
  8. // Microsoft Foundation Classes Reference and related
  9. // electronic documentation provided with the library.
  10. // See these sources for detailed information regarding the
  11. // Microsoft Foundation Classes product.
  12.  
  13. #include "stdafx.h"
  14. #include "MDIBind.h"
  15. #include "MDIDoc.h"
  16. #include "Maskview.h"
  17. #include "RDCView.h"
  18. #include "GridView.h"
  19.  
  20. #include "DSNDlg.h"
  21. #include "RDCDlg.h"
  22.  
  23. #include "MainFrm.h"
  24.  
  25. #ifdef _DEBUG
  26. #define new DEBUG_NEW
  27. #undef THIS_FILE
  28. static char THIS_FILE[] = __FILE__;
  29. #endif
  30.  
  31. /////////////////////////////////////////////////////////////////////////////
  32. // CMainFrame
  33.  
  34. IMPLEMENT_DYNAMIC(CMainFrame, CMDIFrameWnd)
  35.  
  36. BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWnd)
  37.     //{{AFX_MSG_MAP(CMainFrame)
  38.     ON_WM_CREATE()
  39.     ON_COMMAND(ID_WINDOW_BIND, OnWindowBind)
  40.     ON_UPDATE_COMMAND_UI(ID_WINDOW_BIND, OnUpdateWindowBind)
  41.     //}}AFX_MSG_MAP
  42. END_MESSAGE_MAP()
  43.  
  44. static UINT indicators[] =
  45. {
  46.     ID_SEPARATOR,           // status line indicator
  47.     ID_INDICATOR_CAPS,
  48.     ID_INDICATOR_NUM,
  49.     ID_INDICATOR_SCRL,
  50. };
  51.  
  52. /////////////////////////////////////////////////////////////////////////////
  53. // CMainFrame construction/destruction
  54.  
  55. CMainFrame::CMainFrame()
  56. {
  57.     // TODO: add member initialization code here
  58.  
  59. }
  60.  
  61. CMainFrame::~CMainFrame()
  62. {
  63. }
  64.  
  65. int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
  66. {
  67.     if (CMDIFrameWnd::OnCreate(lpCreateStruct) == -1)
  68.         return -1;
  69.  
  70.     if (!m_wndToolBar.Create(this) ||
  71.         !m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
  72.     {
  73.         TRACE0("Failed to create toolbar\n");
  74.         return -1;      // fail to create
  75.     }
  76.  
  77.     if (!m_wndStatusBar.Create(this) ||
  78.         !m_wndStatusBar.SetIndicators(indicators,
  79.           sizeof(indicators)/sizeof(UINT)))
  80.     {
  81.         TRACE0("Failed to create status bar\n");
  82.         return -1;      // fail to create
  83.     }
  84.  
  85.     // TODO: Remove this if you don't want tool tips or a resizeable toolbar
  86.     m_wndToolBar.SetBarStyle(m_wndToolBar.GetBarStyle() |
  87.         CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC);
  88.  
  89.     // TODO: Delete these three lines if you don't want the toolbar to
  90.     // be dockable
  91.     m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
  92.     EnableDocking(CBRS_ALIGN_ANY);
  93.     DockControlBar(&m_wndToolBar);
  94.  
  95.     return 0;
  96. }
  97.  
  98. BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
  99. {
  100.     // TODO: Modify the Window class or styles here by modifying
  101.     // the CREATESTRUCT cs
  102.  
  103.     return CMDIFrameWnd::PreCreateWindow(cs);
  104. }
  105.  
  106. /////////////////////////////////////////////////////////////////////////////
  107. // CMainFrame diagnostics
  108.  
  109. #ifdef _DEBUG
  110. void CMainFrame::AssertValid() const
  111. {
  112.     CMDIFrameWnd::AssertValid();
  113. }
  114.  
  115. void CMainFrame::Dump(CDumpContext& dc) const
  116. {
  117.     CMDIFrameWnd::Dump(dc);
  118. }
  119.  
  120. #endif //_DEBUG
  121.  
  122. /////////////////////////////////////////////////////////////////////////////
  123. // CMainFrame message handlers
  124.  
  125. void CMainFrame::OnWindowBind()
  126. {
  127.     CView* pActiveView=NULL;
  128.     if(MDIGetActive()!=NULL)
  129.         pActiveView=MDIGetActive()->GetActiveView();
  130.     if(!pActiveView)
  131.         return;
  132.     CMDIBindDoc* pDocument=(CMDIBindDoc*) pActiveView->GetDocument();
  133.     if(pActiveView->IsKindOf(RUNTIME_CLASS(CRDCView)))
  134.     { // dialog for RDC control
  135.         CRdc* pRDCCtl=((CRDCView*) pActiveView)->m_pRDCCtl;
  136.         CString DSN=pRDCCtl->GetDataSourceName();
  137.         CString Sql=pRDCCtl->GetSql();
  138.         CString User=pRDCCtl->GetUserName_();
  139.         CString Pw="";  // pRDCCtl->GetPassword() throws an exception - this is the write only property
  140.         CDataSrcDlg dlg(DSN,Sql,User,Pw);
  141.         if(dlg.DoModal()==IDOK)
  142.         {
  143.             ((CRDCView*) pActiveView)->Bind(dlg.m_DSN,dlg.m_Sql,dlg.m_User,dlg.m_Pw);
  144.             // TODO bound controls are refreshed,
  145.             // but here you might check for update of their UI managed by us
  146.             // Grids bound to: check the SQL title
  147.             // MsMasks bound to: check if FieldName valid any longer
  148.         }
  149.     }
  150.     else
  151.     { // dialog for DataBound control
  152.         COpenControlsDlg dlg(pDocument);
  153.         if(dlg.DoModal()!=IDOK)
  154.             return;
  155.         if(dlg.m_pRDCView!=NULL)
  156.         {
  157.             // save the pointer to the new RDC & column name
  158.             pDocument->m_pRDC=dlg.m_pRDCView->m_pRDCCtl;
  159.             pDocument->m_boundCol=dlg.m_ColName;
  160.             // add the RDC window title to the control window title
  161.             int colonpos;
  162.             CString strTitle=pDocument->GetTitle();
  163.             if((colonpos=strTitle.Find(':'))>0)
  164.                 strTitle=strTitle.Left(colonpos); // in case it was already bound
  165.             CString strRDCTitle;
  166.             dlg.m_pRDCView->GetParent()->GetWindowText(strRDCTitle); //title of RDC window
  167.             strTitle +=_T(":") + strRDCTitle;
  168.             if(!dlg.m_ColName.IsEmpty())     //the column name(simple control)
  169.                 strTitle += "-" + dlg.m_ColName;
  170.             pDocument->SetTitle(strTitle); // new window caption
  171.             // rebind all controls (other views may be  affected)
  172.             pDocument->UpdateAllViews(NULL);
  173.         }
  174.     }
  175.  
  176. }
  177.  
  178. void CMainFrame::OnUpdateWindowBind(CCmdUI* pCmdUI)
  179. {
  180.     pCmdUI->Enable(MDIGetActive()!=NULL);
  181.  
  182. }
  183.