SPLASH.CPP
上传用户:aakk678
上传日期:2022-07-09
资源大小:406k
文件大小:3k
源码类别:

界面编程

开发平台:

Visual C++

  1. // splash.cpp : implementation file
  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 "wordpad.h"
  14. #ifdef _DEBUG
  15. #undef THIS_FILE
  16. static char BASED_CODE THIS_FILE[] = __FILE__;
  17. #endif
  18. /////////////////////////////////////////////////////////////////////////////
  19. // CSplashWnd dialog
  20. BOOL CSplashWnd::Create(CWnd* pParent)
  21. {
  22. //{{AFX_DATA_INIT(CSplashWnd)
  23. // NOTE: the ClassWizard will add member initialization here
  24. //}}AFX_DATA_INIT
  25. if (!CDialog::Create(CSplashWnd::IDD, pParent))
  26. {
  27. TRACE0("Warning: creation of CSplashWnd dialog failedn");
  28. return FALSE;
  29. }
  30. return TRUE;
  31. }
  32. BOOL CSplashWnd::OnInitDialog()
  33. {
  34. CDialog::OnInitDialog();
  35. CenterWindow();
  36. // initialize the big icon control
  37. m_icon.SubclassDlgItem(IDC_BIGICON, this);
  38. m_icon.SizeToContent();
  39. return TRUE;  // return TRUE  unless you set the focus to a control
  40. }
  41. /////////////////////////////////////////////////////////////////////////////
  42. // CSplashWnd message handlers
  43. /////////////////////////////////////////////////////////////////////////////
  44. // CBigIcon
  45. BEGIN_MESSAGE_MAP(CBigIcon, CButton)
  46. //{{AFX_MSG_MAP(CBigIcon)
  47. ON_WM_DRAWITEM()
  48. ON_WM_ERASEBKGND()
  49. //}}AFX_MSG_MAP
  50. END_MESSAGE_MAP()
  51. /////////////////////////////////////////////////////////////////////////////
  52. // CBigIcon message handlers
  53. #define CY_SHADOW   4
  54. #define CX_SHADOW   4
  55. void CBigIcon::SizeToContent()
  56. {
  57. m_bitmap.LoadBitmap(IDB_BITMAP48);
  58. BITMAP bm;
  59. m_bitmap.GetObject(sizeof(bm), &bm);
  60. m_sizeBitmap = CSize(bm.bmWidth, bm.bmHeight);
  61. // get system icon size
  62. // a big icon should be twice the size of an icon + shadows
  63. SetWindowPos(NULL, 0, 0, bm.bmWidth + CX_SHADOW + 4, bm.bmHeight + CY_SHADOW + 4,
  64. SWP_NOACTIVATE|SWP_NOMOVE|SWP_NOZORDER);
  65. }
  66. void CBigIcon::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
  67. {
  68. CDC* pDC = CDC::FromHandle(lpDrawItemStruct->hDC);
  69. ASSERT(pDC != NULL);
  70. CRect rect;
  71. GetClientRect(rect);
  72. int cxClient = rect.Width();
  73. int cyClient = rect.Height();
  74. // draw border around icon
  75. CPen pen;
  76. pen.CreateStockObject(BLACK_PEN);
  77. CPen* pPenOld = pDC->SelectObject(&pen);
  78. pDC->Rectangle(0, 0, cxClient-CX_SHADOW, cyClient-CY_SHADOW);
  79. if (pPenOld)
  80. pDC->SelectObject(pPenOld);
  81. // draw shadows around icon
  82. CBrush br;
  83. br.CreateStockObject(DKGRAY_BRUSH);
  84. rect.SetRect(cxClient-CX_SHADOW, CY_SHADOW, cxClient, cyClient);
  85. pDC->FillRect(rect, &br);
  86. rect.SetRect(CX_SHADOW, cyClient-CY_SHADOW, cxClient, cyClient);
  87. pDC->FillRect(rect, &br);
  88. // draw the bitmap contents
  89. CDC dcMem;
  90. if (!dcMem.CreateCompatibleDC(pDC))
  91. return;
  92. CBitmap* pBitmapOld = dcMem.SelectObject(&m_bitmap);
  93. if (pBitmapOld == NULL)
  94. return;
  95. pDC->BitBlt(2, 2, m_sizeBitmap.cx, m_sizeBitmap.cy, &dcMem, 0, 0, SRCCOPY);
  96. dcMem.SelectObject(pBitmapOld);
  97. }
  98. BOOL CBigIcon::OnEraseBkgnd(CDC*)
  99. {
  100. return TRUE;    // we don't do any erasing...
  101. }
  102. /////////////////////////////////////////////////////////////////////////////