GroupboxEx.cpp
上传用户:lds876
上传日期:2013-05-25
资源大小:567k
文件大小:2k
源码类别:

P2P编程

开发平台:

Visual C++

  1. // GroupboxEx.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "testbt.h"
  5. #include "GroupboxEx.h"
  6. #ifdef _DEBUG
  7. #define new DEBUG_NEW
  8. #undef THIS_FILE
  9. static char THIS_FILE[] = __FILE__;
  10. #endif
  11. /////////////////////////////////////////////////////////////////////////////
  12. // CGroupboxEx
  13. CGroupBoxEx::CGroupBoxEx()
  14. {
  15. m_font.CreateFont(-12, 0, 0, 0, FW_BOLD, 0, 0, 0, 134, 0, 0, 0, 2, "宋体");
  16. }
  17. CGroupBoxEx::~CGroupBoxEx()
  18. {
  19. }
  20. BEGIN_MESSAGE_MAP(CGroupBoxEx, CButton)
  21. //{{AFX_MSG_MAP(CGroupBoxEx)
  22. ON_WM_PAINT()
  23. //}}AFX_MSG_MAP
  24. END_MESSAGE_MAP()
  25. /////////////////////////////////////////////////////////////////////////////
  26. // CGroupBoxEx message handlers
  27. void CGroupBoxEx::PreSubclassWindow() 
  28. {
  29. // store the current text (from resource)
  30. GetWindowText(m_txtString);
  31. // store the box rectangle
  32. GetWindowRect(&m_boxRect);
  33. ScreenToClient(&m_boxRect);
  34. CButton::PreSubclassWindow();
  35. }
  36. void CGroupBoxEx::OnPaint() 
  37. {
  38. CPaintDC dc(this); // device context for painting
  39. // add a blank on each side of text
  40. CString sText;
  41. sText.Format(" %s ", m_txtString);
  42. // get the text size used by resource editor
  43. CSize seText0 = dc.GetTextExtent(sText);
  44. // set the font to draw
  45. CFont *oldFont = dc.SelectObject(&m_font);
  46. int PenStyle = PS_GEOMETRIC | PS_SOLID | PS_ENDCAP_SQUARE;
  47. CPen pnFrmDark, pnFrmLight;
  48. pnFrmDark.CreatePen(PenStyle, 1, ::GetSysColor(COLOR_3DSHADOW));
  49. pnFrmLight.CreatePen(PenStyle, 1, ::GetSysColor(COLOR_3DHILIGHT));
  50. // get the drawn text size
  51. CSize seText = dc.GetTextExtent(sText);
  52. CPoint ptStart, ptEnd;
  53. ptStart.y = ptEnd.y = m_boxRect.top + seText0.cy / 2 - 1;
  54. ptStart.x = m_boxRect.left + seText.cx;
  55. ptEnd.x = m_boxRect.right;
  56. // draw the first box
  57. CPen* ppnOldPen = dc.SelectObject(&pnFrmDark);
  58. dc.MoveTo(ptStart);
  59. dc.LineTo(m_boxRect.right,                   ptStart.y);
  60. // draw the second box (hilite)
  61. dc.SelectObject(&pnFrmLight);
  62. dc.MoveTo(ptStart.x,                        ptStart.y + 1);
  63. dc.LineTo(m_boxRect.right + 1,  ptStart.y + 1);
  64. //
  65. // draw text (if any)
  66. //
  67. dc.SetBkMode(TRANSPARENT);
  68. if(!sText.IsEmpty())
  69. {
  70. // get top of text box
  71. dc.DrawText(sText, m_boxRect, 
  72. DT_TOP| DT_LEFT | DT_SINGLELINE | DT_NOCLIP);
  73. }
  74. dc.SelectObject(oldFont);
  75. dc.SelectObject(ppnOldPen);
  76. // Do not call CButton::OnPaint() for painting messages
  77. }