CaptionDemo.cpp
上传用户:kssdz899
上传日期:2007-01-08
资源大小:79k
文件大小:6k
源码类别:

钩子与API截获

开发平台:

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