HELLO.CPP
上传用户:bangxh
上传日期:2007-01-31
资源大小:42235k
文件大小:3k
源码类别:

Windows编程

开发平台:

Visual C++

  1. // hello.cpp : Defines the class behaviors for the Hello child window.
  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 "hello.h"
  15. #include "mdi.h"
  16. /////////////////////////////////////////////////////////////////////////////
  17. // CHelloWnd Member Functions
  18. BEGIN_MESSAGE_MAP(CHelloWnd, CMDIChildWnd)
  19. //{{AFX_MSG_MAP(CHelloWnd)
  20. ON_WM_PAINT()
  21. ON_COMMAND(IDM_BLACK, OnColor)
  22. ON_COMMAND(IDM_CUSTOM, OnCustomColor)
  23. ON_COMMAND(IDM_RED, OnColor)
  24. ON_COMMAND(IDM_GREEN, OnColor)
  25. ON_COMMAND(IDM_BLUE, OnColor)
  26. ON_COMMAND(IDM_WHITE, OnColor)
  27. ON_UPDATE_COMMAND_UI(IDM_BLACK, OnUpdateColor)
  28. ON_UPDATE_COMMAND_UI(IDM_BLUE, OnUpdateColor)
  29. ON_UPDATE_COMMAND_UI(IDM_GREEN, OnUpdateColor)
  30. ON_UPDATE_COMMAND_UI(IDM_RED, OnUpdateColor)
  31. ON_UPDATE_COMMAND_UI(IDM_WHITE, OnUpdateColor)
  32. ON_UPDATE_COMMAND_UI(IDM_CUSTOM, OnUpdateColor)
  33. //}}AFX_MSG_MAP
  34. END_MESSAGE_MAP()
  35. CMenu NEAR CHelloWnd::menu;     // menu for all HELLO windows
  36. /////////////////////////////////////////////////////////////////////////////
  37. // CHelloWnd construction
  38. BOOL CHelloWnd::Create(LPCTSTR szTitle, LONG style /* = 0 */,
  39. const RECT& rect /* = rectDefault */,
  40. CMDIFrameWnd* parent /* = NULL */)
  41. {
  42. // Setup the shared menu
  43. if (menu.m_hMenu == NULL)
  44. menu.LoadMenu(IDR_HELLO);
  45. m_hMenuShared = menu.m_hMenu;
  46. // Register a custom WndClass and create a window.
  47. // This must be done because CHelloWnd has a custom icon.
  48. LPCTSTR lpszHelloClass =
  49.   AfxRegisterWndClass(CS_HREDRAW | CS_VREDRAW,
  50. LoadCursor(NULL, IDC_ARROW),
  51. (HBRUSH) (COLOR_WINDOW+1),
  52. LoadIcon(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDI_HELLO)));
  53. return CMDIChildWnd::Create(lpszHelloClass, szTitle, style, rect, parent);
  54. }
  55. CHelloWnd::CHelloWnd()
  56. {
  57. m_nIDColor = IDM_BLACK;
  58. m_clrText = RGB(0, 0, 0);
  59. }
  60. // OnPaint:
  61. // Draw a string in the center of the client area.
  62. //
  63. void CHelloWnd::OnPaint()
  64. {
  65. CPaintDC dc(this);
  66. CRect rect;
  67. dc.SetTextColor(m_clrText);
  68. dc.SetBkColor(::GetSysColor(COLOR_WINDOW));
  69. GetClientRect(rect);
  70. dc.DrawText(_T("Hello, World!"), -1, rect,
  71. DT_SINGLELINE | DT_CENTER | DT_VCENTER);
  72. }
  73. /////////////////////////////////////////////////////////////////////////////
  74. // CHelloWnd command
  75. void CHelloWnd::OnUpdateColor(CCmdUI* pCmdUI)
  76. {
  77. pCmdUI->SetCheck(pCmdUI->m_nID == m_nIDColor);
  78. }
  79. void CHelloWnd::OnColor()
  80. {
  81. m_nIDColor = LOWORD(GetCurrentMessage()->wParam);
  82. m_clrText = colorArray[m_nIDColor - IDM_BLACK];
  83. // Force the client area text to be repainted in the new color
  84. Invalidate();
  85. }
  86. void CHelloWnd::OnCustomColor()
  87. {
  88. CColorDialog dlgColor(m_clrText);
  89. if (dlgColor.DoModal() == IDOK)
  90. {
  91. m_clrText = dlgColor.GetColor();
  92. m_nIDColor = IDM_CUSTOM;
  93. Invalidate();
  94. }
  95. }