1. #include "StdAfx.h"
  2. #include "TextBar.h"
  3. #include "../eterlib/Util.h"
  4. void CTextBar::__SetFont(int fontSize, bool isBold)
  5. {
  6. int iCodePage = GetDefaultCodePage();
  7. LOGFONT logFont;
  8. memset(&logFont, 0, sizeof(LOGFONT));
  9. logFont.lfHeight = fontSize;
  10. logFont.lfEscapement = 0;
  11. logFont.lfOrientation = 0;
  12. if (isBold)
  13. logFont.lfWeight = FW_BOLD;
  14. else
  15. logFont.lfWeight = FW_NORMAL;
  16. logFont.lfItalic = FALSE;
  17. logFont.lfUnderline = FALSE;
  18. logFont.lfStrikeOut = FALSE;
  19. logFont.lfCharSet = GetCharsetFromCodePage(iCodePage);
  20. logFont.lfOutPrecision = OUT_DEFAULT_PRECIS;
  21. logFont.lfClipPrecision = CLIP_DEFAULT_PRECIS;
  22. logFont.lfQuality = ANTIALIASED_QUALITY;
  23. logFont.lfPitchAndFamily = VARIABLE_PITCH;
  24. strcpy(logFont.lfFaceName, GetFontFaceFromCodePage(iCodePage));
  25. m_hFont = CreateFontIndirect(&logFont);
  26. HDC hdc = m_dib.GetDCHandle();
  27. m_hOldFont = (HFONT)SelectObject(hdc, m_hFont);
  28. }
  29. void CTextBar::SetTextColor(int r, int g, int b)
  30. {
  31. HDC hDC = m_dib.GetDCHandle();
  32. ::SetTextColor(hDC, RGB(r, g, b));
  33. }
  34. void CTextBar::GetTextExtent(const char * c_szText, SIZE* p_size)
  35. {
  36. HDC hDC = m_dib.GetDCHandle();
  37. GetTextExtentPoint32(hDC, c_szText, strlen(c_szText), p_size);
  38. }
  39. void CTextBar::TextOut(int ix, int iy, const char * c_szText)
  40. {
  41. m_dib.TextOut(ix, iy, c_szText);
  42. Invalidate();
  43. }
  44. void CTextBar::OnCreate()
  45. {
  46. m_dib.SetBkMode(TRANSPARENT);
  47. __SetFont(m_fontSize, m_isBold);
  48. }
  49. CTextBar::CTextBar(int fontSize, bool isBold)
  50. {
  51. m_hOldFont = NULL;
  52. m_fontSize = fontSize;
  53. m_isBold = isBold;
  54. }
  55. CTextBar::~CTextBar()
  56. {
  57. HDC hdc = m_dib.GetDCHandle();
  58. SelectObject(hdc, m_hOldFont);
  59. }