mdi.cpp
上传用户:liudazhe
上传日期:2007-01-02
资源大小:51k
文件大小:5k
源码类别:

菜单

开发平台:

Visual C++

  1. // MDI.cpp : Defines the class behaviors for the application.
  2. //
  3. // This is a part of the Microsoft Foundation Classes C++ library.
  4. // Copyright (C) 1992-1997 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. #include "stdafx.h"
  13. #include "MDI.h"
  14. #include "MainFrm.h"
  15. #include "HelloFrm.h"
  16. #include "HelloDoc.h"
  17. #include "HelloVw.h"
  18. //Added for Bounce document
  19. #include "BncFrm.h"
  20. #include "BncDoc.h"
  21. #include "BncVw.h"
  22. #ifdef _DEBUG
  23. #define new DEBUG_NEW
  24. #undef THIS_FILE
  25. static char THIS_FILE[] = __FILE__;
  26. #endif
  27. /////////////////////////////////////////////////////////////////////////////
  28. // CMDIApp
  29. BEGIN_MESSAGE_MAP(CMDIApp, CWinApp)
  30. //{{AFX_MSG_MAP(CMDIApp)
  31. ON_COMMAND(ID_APP_ABOUT, OnAppAbout)
  32. ON_COMMAND(ID_FILE_NEWHELLO, OnNewHello)
  33. ON_COMMAND(ID_FILE_NEWBOUNCE, OnNewBounce)
  34. //}}AFX_MSG_MAP
  35. // Standard file based document commands
  36. ON_COMMAND(ID_FILE_NEW, CWinApp::OnFileNew)
  37. ON_COMMAND(ID_FILE_OPEN, CWinApp::OnFileOpen)
  38. END_MESSAGE_MAP()
  39. /////////////////////////////////////////////////////////////////////////////
  40. // CMDIApp construction
  41. CMDIApp::CMDIApp()
  42. {
  43. }
  44. /////////////////////////////////////////////////////////////////////////////
  45. // The one and only CMDIApp object
  46. CMDIApp theApp;
  47. /////////////////////////////////////////////////////////////////////////////
  48. // CMDIApp initialization
  49. BOOL CMDIApp::InitInstance()
  50. {
  51. // Register the application's document templates.  Document templates
  52. // serve as the connection between documents, frame windows and views.
  53. CMultiDocTemplate* pDocTemplate;
  54. pDocTemplate = new CMultiDocTemplate(
  55. IDR_HELLOTYPE,
  56. RUNTIME_CLASS(CHelloDoc),
  57. RUNTIME_CLASS(CHelloFrame), // custom MDI child frame
  58. RUNTIME_CLASS(CHelloView));
  59. AddDocTemplate(pDocTemplate);
  60. // Add Bounce template to list
  61. CMultiDocTemplate* pBounceTemplate;
  62. pBounceTemplate = new CMultiDocTemplate(
  63. IDR_BOUNCETYPE,
  64. RUNTIME_CLASS(CBounceDoc),
  65. RUNTIME_CLASS(CBounceFrame), // custom MDI child frame
  66. RUNTIME_CLASS(CBounceView));
  67. AddDocTemplate(pBounceTemplate);
  68. // create main MDI Frame window
  69. CMainFrame* pMainFrame = new CMainFrame;
  70. if (!pMainFrame->LoadFrame(IDR_MAINFRAME))
  71. return FALSE;
  72. m_pMainWnd = pMainFrame;
  73. // The main window has been initialized, so show and update it.
  74. pMainFrame->ShowWindow(m_nCmdShow);
  75. pMainFrame->UpdateWindow();
  76. return TRUE;
  77. }
  78. /////////////////////////////////////////////////////////////////////////////
  79. // CAboutDlg dialog used for App About
  80. class CAboutDlg : public CDialog
  81. {
  82. public:
  83. CAboutDlg();
  84. // Dialog Data
  85. //{{AFX_DATA(CAboutDlg)
  86. enum { IDD = IDD_ABOUTBOX };
  87. //}}AFX_DATA
  88. // ClassWizard generated virtual function overrides
  89. //{{AFX_VIRTUAL(CAboutDlg)
  90. protected:
  91. virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
  92. //}}AFX_VIRTUAL
  93. // Implementation
  94. protected:
  95. //{{AFX_MSG(CAboutDlg)
  96. // No message handlers
  97. //}}AFX_MSG
  98. DECLARE_MESSAGE_MAP()
  99. };
  100. CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
  101. {
  102. //{{AFX_DATA_INIT(CAboutDlg)
  103. //}}AFX_DATA_INIT
  104. }
  105. void CAboutDlg::DoDataExchange(CDataExchange* pDX)
  106. {
  107. CDialog::DoDataExchange(pDX);
  108. //{{AFX_DATA_MAP(CAboutDlg)
  109. //}}AFX_DATA_MAP
  110. }
  111. BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
  112. //{{AFX_MSG_MAP(CAboutDlg)
  113. // No message handlers
  114. //}}AFX_MSG_MAP
  115. END_MESSAGE_MAP()
  116. // App command to run the dialog
  117. void CMDIApp::OnAppAbout()
  118. {
  119. CAboutDlg aboutDlg;
  120. aboutDlg.DoModal();
  121. }
  122. /////////////////////////////////////////////////////////////////////////////
  123. // other globals
  124. // Color array maps colors to top-level Color menu 
  125. COLORREF NEAR colorArray[] =
  126. {
  127. RGB (0, 0, 0),
  128. RGB (255, 0, 0),
  129. RGB (0, 255, 0),
  130. RGB (0, 0, 255),
  131. RGB (255, 255, 255)
  132. };
  133. /////////////////////////////////////////////////////////////////////////////
  134. // CMDIApp commands
  135. // The following two command handlers provides an 
  136. // alternative way to open documents by hiding the fact 
  137. // that the application has multiple templates. The
  138. // default method uses a dialog with a listing of
  139. // possible types to choose from.
  140. void CMDIApp::OnNewHello() 
  141. {
  142. // Searches template list for a document type 
  143. // containing the "Hello" string
  144. POSITION curTemplatePos = GetFirstDocTemplatePosition();
  145. while(curTemplatePos != NULL)
  146. {
  147. CDocTemplate* curTemplate = 
  148. GetNextDocTemplate(curTemplatePos);
  149. CString str;
  150. curTemplate->GetDocString(str, CDocTemplate::docName);
  151. if(str == _T("Hello"))
  152. {
  153. curTemplate->OpenDocumentFile(NULL);
  154. return;
  155. }
  156. }
  157. AfxMessageBox(IDS_NOHELLOTEMPLATE);
  158. }
  159. void CMDIApp::OnNewBounce() 
  160. {
  161. // Searches template list for a document type 
  162. // containing the "Bounce" string
  163. POSITION curTemplatePos = GetFirstDocTemplatePosition();
  164. while(curTemplatePos != NULL)
  165. {
  166. CDocTemplate* curTemplate = 
  167. GetNextDocTemplate(curTemplatePos);
  168. CString str;
  169. curTemplate->GetDocString(str, CDocTemplate::docName);
  170. if(str == _T("Bounce"))
  171. {
  172. curTemplate->OpenDocumentFile(NULL);
  173. return;
  174. }
  175. }
  176. AfxMessageBox(IDS_NOBOUNCETEMPLATE);
  177. }