CaptionDemo.cpp
上传用户:zhoushen
上传日期:2022-06-15
资源大小:84k
文件大小:7k
源码类别:

对话框与窗口

开发平台:

Visual C++

  1. // CaptionDemo.cpp : Defines the class behaviors for the application.
  2. //
  3. //
  4. #include "stdafx.h"
  5. #include "CaptionDemo.h"
  6. #include "MainFrm.h"
  7. #include "ChildFrm.h"
  8. #include "CaptionDemoDoc.h"
  9. #include "CaptionDemoView.h"
  10. #include "../CustomCaption/SingleLineCaption.h"
  11. #include "../CustomCaption/CaptionTextAttributes.h"
  12. #include "../CustomCaption/CaptionBackground.h"
  13. // Auto-link CustomCaption library
  14. #ifdef _MFC_VER
  15. #pragma comment(lib, "../CustomCaption/debug/CustomCaption")
  16. #endif
  17. #ifdef _DEBUG
  18. #define new DEBUG_NEW
  19. #undef THIS_FILE
  20. static char THIS_FILE[] = __FILE__;
  21. #endif
  22. /////////////////////////////////////////////////////////////////////////////
  23. // CCaptionDemoApp
  24. BEGIN_MESSAGE_MAP(CCaptionDemoApp, CWinApp)
  25. //{{AFX_MSG_MAP(CCaptionDemoApp)
  26. ON_COMMAND(ID_APP_ABOUT, OnAppAbout)
  27. // NOTE - the ClassWizard will add and remove mapping macros here.
  28. //    DO NOT EDIT what you see in these blocks of generated code!
  29. //}}AFX_MSG_MAP
  30. // Standard file based document commands
  31. ON_COMMAND(ID_FILE_NEW, CWinApp::OnFileNew)
  32. ON_COMMAND(ID_FILE_OPEN, CWinApp::OnFileOpen)
  33. // Standard print setup command
  34. ON_COMMAND(ID_FILE_PRINT_SETUP, CWinApp::OnFilePrintSetup)
  35. END_MESSAGE_MAP()
  36. /////////////////////////////////////////////////////////////////////////////
  37. // CCaptionDemoApp construction
  38. CCaptionDemoApp::CCaptionDemoApp()
  39. {
  40. // TODO: add construction code here,
  41. // Place all significant initialization in InitInstance
  42. }
  43. /////////////////////////////////////////////////////////////////////////////
  44. // The one and only CCaptionDemoApp object
  45. CCaptionDemoApp theApp;
  46. /////////////////////////////////////////////////////////////////////////////
  47. // CCaptionDemoApp initialization
  48. BOOL CCaptionDemoApp::InitInstance()
  49. {
  50. AfxEnableControlContainer();
  51. // Standard initialization
  52. // If you are not using these features and wish to reduce the size
  53. //  of your final executable, you should remove from the following
  54. //  the specific initialization routines you do not need.
  55. #ifdef _AFXDLL
  56. Enable3dControls(); // Call this when using MFC in a shared DLL
  57. #else
  58. Enable3dControlsStatic(); // Call this when linking to MFC statically
  59. #endif
  60. // Change the registry key under which our settings are stored.
  61. // TODO: You should modify this string to be something appropriate
  62. // such as the name of your company or organization.
  63. SetRegistryKey(_T("Local AppWizard-Generated Applications"));
  64. LoadStdProfileSettings();  // Load standard INI file options (including MRU)
  65. // Register the application's document templates.  Document templates
  66. //  serve as the connection between documents, frame windows and views.
  67. CMultiDocTemplate* pDocTemplate;
  68. pDocTemplate = new CMultiDocTemplate(
  69. IDR_CAPTIOTYPE,
  70. RUNTIME_CLASS(CCaptionDemoDoc),
  71. RUNTIME_CLASS(CChildFrame), // custom MDI child frame
  72. RUNTIME_CLASS(CCaptionDemoView));
  73. AddDocTemplate(pDocTemplate);
  74. // create main MDI Frame window
  75. CMainFrame* pMainFrame = new CMainFrame;
  76. if (!pMainFrame->LoadFrame(IDR_MAINFRAME))
  77. return FALSE;
  78. m_pMainWnd = pMainFrame;
  79. // Parse command line for standard shell commands, DDE, file open
  80. CCommandLineInfo cmdInfo;
  81. ParseCommandLine(cmdInfo);
  82. // Dispatch commands specified on the command line
  83. if (!ProcessShellCommand(cmdInfo))
  84. return FALSE;
  85. // The main window has been initialized, so show and update it.
  86. pMainFrame->ShowWindow(m_nCmdShow);
  87. pMainFrame->UpdateWindow();
  88. return TRUE;
  89. }
  90. /////////////////////////////////////////////////////////////////////////////
  91. // CAboutDlg dialog used for App About
  92. class CAboutDlg : public CDialog
  93. {
  94. public:
  95. virtual BOOL OnInitDialog( );
  96. CAboutDlg();
  97. // Dialog Data
  98. //{{AFX_DATA(CAboutDlg)
  99. enum { IDD = IDD_ABOUTBOX };
  100. //}}AFX_DATA
  101. // ClassWizard generated virtual function overrides
  102. //{{AFX_VIRTUAL(CAboutDlg)
  103. protected:
  104. virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
  105. //}}AFX_VIRTUAL
  106. // Implementation
  107. protected:
  108. //{{AFX_MSG(CAboutDlg)
  109. // No message handlers
  110. //}}AFX_MSG
  111. DECLARE_MESSAGE_MAP()
  112. CSingleLineCaption m_Caption;
  113. };
  114. CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
  115. {
  116. //{{AFX_DATA_INIT(CAboutDlg)
  117. //}}AFX_DATA_INIT
  118. }
  119. void CAboutDlg::DoDataExchange(CDataExchange* pDX)
  120. {
  121. CDialog::DoDataExchange(pDX);
  122. //{{AFX_DATA_MAP(CAboutDlg)
  123. //}}AFX_DATA_MAP
  124. }
  125. BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
  126. //{{AFX_MSG_MAP(CAboutDlg)
  127. // No message handlers
  128. //}}AFX_MSG_MAP
  129. END_MESSAGE_MAP()
  130. // App command to run the dialog
  131. void CCaptionDemoApp::OnAppAbout()
  132. {
  133. CAboutDlg aboutDlg;
  134. aboutDlg.DoModal();
  135. }
  136. /////////////////////////////////////////////////////////////////////////////
  137. // CCaptionDemoApp message handlers
  138. BOOL CAboutDlg::OnInitDialog()
  139. {
  140. CDialog::OnInitDialog();
  141. // Prepare to display the informative text
  142. CEdit* pEdit = (CEdit*)GetDlgItem(IDC_ABOUT_EDIT);
  143. pEdit->SetWindowText(
  144. "CaptionDemo illustrates the use of the CCaption class, its derived classes, "
  145. "and its associated CCaptionBackground and CTextAttributes classes.rnrn"
  146. "To customise the caption of an active CaptionDemo child window, use the ""
  147. "Document Title..." and "Caption Style" options on the "Edit" menu.rnrn"
  148. "In this application, the source files ChildFrm.h and ChildFrm.cpp show the "
  149. "use of the CMultiLineCaption class to draw a multi-line auto-wrapped caption "
  150. "on an MDI child window frame, and file CMainFrm.cpp shows examples of how the "
  151. "caption may be customised using the provided background and text attribute classes.rnrn"
  152. "A basic multi-line caption may be achieved simply by declaring a CMultiLineCaption "
  153. "object in the CMDIChildWnd header file (see ChildFrm.h), and calling its Install() "
  154. "method in the CMDIChildWnd's OnCreate() method (see ChildFrm.cpp). Don't forget to "
  155. "include the MultiLineCaption.h header file.rnrn"
  156. "Class CMultiLineCaptionEx is provided to fix the effects of a strange Windows 'feature' "
  157. "that causes a normal Windows caption to be painted on mouse movements and button clicks "
  158. "in the non-client area, but only after the frame's system menu has been displayed. "
  159. "This 'feature' causes an ugly line to appear across multi-line captions in Windows NT "
  160. "and Windows95, but it is not present in Windows 2000.rnrn"
  161. "Notice that this 'About' dialog itself uses a single line custom caption (CSingleLineCaption, "
  162. "check the CAboutDialog code in file CaptionDemo.cpp for details). At present, multi-line "
  163. "captions are not supported with dialogs, only normal height captions, so use class "
  164. "CSingleLineCaption, not CMultiLineCaption. Don't forget to set the dialog title icon using "
  165. "CSingleLineCaption method SetIcon(HICON), e.g:rnrn"
  166. "m_Caption.SetIcon(theApp.LoadIcon(IDR_CAPTIOTYPE));rnrn"
  167. "                                      *** End ***"
  168. );
  169. // Install and configure the dialog caption
  170. m_Caption.Install(this);
  171. // Caption icon
  172. m_Caption.SetIcon(theApp.LoadIcon(IDR_CAPTIOTYPE));
  173. // Caption colors
  174.   m_Caption.GetBackground()->SetActiveColor(RGB(0,0,0));
  175. CCaptionTextAttributes* pTextAttr = m_Caption.GetTextAttributes();
  176. pTextAttr->SetActiveColor(RGB(255,255,0));
  177. // Caption font
  178. LOGFONT font;
  179. pTextAttr->GetActiveFont()->GetLogFont(&font);
  180. font.lfItalic = TRUE;
  181. font.lfWeight = FW_HEAVY;
  182. pTextAttr->SetActiveFont(font);
  183. return TRUE;
  184. }