NiceEdit.cpp
上传用户:szhuagan
上传日期:2021-05-27
资源大小:2676k
文件大小:3k
源码类别:

编辑框

开发平台:

Visual C++

  1. // ColorEdit.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "NiceEdit.h"
  5. #include "Color.h" // File Holding (#define)'s for COLORREF Values
  6. #include ".niceedit.h"
  7. #ifdef _DEBUG
  8. #define new DEBUG_NEW
  9. #undef THIS_FILE
  10. static char THIS_FILE[] = __FILE__;
  11. #endif
  12. /////////////////////////////////////////////////////////////////////////////
  13. // CNiceEdit
  14. CNiceEdit::CNiceEdit()
  15. : m_bHasEntered(FALSE)
  16. {
  17. m_crBkColor = BLACK; // Initializing background color to black
  18. m_crTextColor = GREEN; // Initializing text color to black
  19. m_brBkgnd.CreateSolidBrush(m_crBkColor); // Creating the Brush Color For the Edit Box Background
  20. m_crInitBorderColor = LIGHTGREEN;  //Initial defualt  border Color
  21. m_crBorderColor = m_crInitBorderColor;  
  22. }
  23. CNiceEdit::~CNiceEdit()
  24. {
  25. }
  26. BEGIN_MESSAGE_MAP(CNiceEdit, CEdit)
  27. //{{AFX_MSG_MAP(CNiceEdit)
  28. ON_WM_CTLCOLOR_REFLECT()
  29. //}}AFX_MSG_MAP
  30. ON_WM_LBUTTONDOWN()
  31. ON_WM_KILLFOCUS()
  32. ON_WM_SETFOCUS()
  33. END_MESSAGE_MAP()
  34. /////////////////////////////////////////////////////////////////////////////
  35. // CNiceEdit message handlers
  36. void CNiceEdit::SetTextColor(COLORREF crColor)
  37. {
  38. m_crTextColor = crColor; // Passing the value passed by the dialog to the member varaible for Text Color
  39. RedrawWindow();
  40. }
  41. void CNiceEdit::SetBkColor(COLORREF crColor)
  42. {
  43. m_crBkColor = crColor; 
  44. m_brBkgnd.DeleteObject(); //删除已经存在的填充画刷
  45. m_brBkgnd.CreateSolidBrush(crColor); 
  46. RedrawWindow();
  47. }
  48. HBRUSH CNiceEdit::CtlColor(CDC* pDC, UINT nCtlColor)
  49. {
  50. HBRUSH hbr;
  51. hbr = (HBRUSH)m_brBkgnd; //把预定义的画刷句柄给hbr
  52. pDC->BeginPath();
  53. pDC->SetBkColor(m_crBkColor); 
  54. pDC->SetTextColor(m_crTextColor); 
  55. pDC->EndPath();
  56. pDC->SelectClipPath( RGN_XOR );
  57. if( ! m_bHasEntered )
  58. {
  59. GetWindowRect( m_rcEntire );
  60. m_rcEntire.SetRect ( -3, -3, m_rcEntire.Width() - 3, m_rcEntire.Height() - 3 );
  61. }
  62. CPen borderPen(PS_JOIN_ROUND , 2, m_bHasEntered ? m_crBorderColor :  m_crInitBorderColor ),*pOldPen = NULL;
  63. pOldPen = pDC->SelectObject( &borderPen );
  64. pDC->MoveTo( m_rcEntire.TopLeft() );
  65. pDC->LineTo( m_rcEntire.right, m_rcEntire.top );
  66. pDC->MoveTo( m_rcEntire.right, m_rcEntire.top );
  67. pDC->LineTo( m_rcEntire.BottomRight() );
  68. pDC->MoveTo( m_rcEntire.BottomRight() );
  69. pDC->LineTo( m_rcEntire.left, m_rcEntire.bottom );
  70. pDC->MoveTo( m_rcEntire.left, m_rcEntire.bottom);
  71. pDC->LineTo( m_rcEntire.TopLeft() );
  72. pDC->SelectObject( pOldPen );
  73. borderPen.DeleteObject();
  74. return hbr;
  75. }
  76. BOOL CNiceEdit::SetReadOnly(BOOL flag)
  77. {
  78.    SetBkColor(m_crBkColor);
  79.    return CEdit::SetReadOnly(flag);
  80. }
  81. void CNiceEdit::OnLButtonDown(UINT nFlags, CPoint point)
  82. {
  83. // TODO: 在此添加消息处理程序代码和/或调用默认值
  84. if( m_crBorderColor != m_crInitBorderColor )  //不为原始边框颜色
  85. m_crBorderColor = 0x00FFFFFF & ~m_crInitBorderColor;
  86. m_bHasEntered = TRUE;
  87. RedrawWindow();
  88. CEdit::OnLButtonDown(nFlags, point);
  89. }
  90. void CNiceEdit::OnKillFocus(CWnd* pNewWnd)
  91. {
  92. CEdit::OnKillFocus(pNewWnd);
  93. m_crBorderColor = m_crInitBorderColor;
  94. m_bHasEntered = FALSE;
  95. RedrawWindow();
  96. // TODO: 在此处添加消息处理程序代码
  97. }
  98. void CNiceEdit::OnSetFocus(CWnd* pOldWnd)
  99. {
  100. CEdit::OnSetFocus(pOldWnd);
  101. m_crBorderColor = 0x00FFFFFF & ~m_crBorderColor;
  102. m_bHasEntered = TRUE;
  103. RedrawWindow();
  104. // TODO: 在此处添加消息处理程序代码
  105. }
  106. // 设置变宽颜色
  107. void CNiceEdit::SetBorderColor(COLORREF newValue)
  108. {
  109. m_crInitBorderColor = newValue;
  110. RedrawWindow();
  111. }