DPI.h 797 B

12345678910111213141516171819202122232425262728293031323334353637383940
  1. #pragma once
  2. // Definition: relative pixel = 1 pixel at 96 DPI and scaled based on actual DPI.
  3. class CDPI
  4. {
  5. public:
  6. CDPI() : _fInitialized(false), m_dpi(96)
  7. {
  8. }
  9. void Update(int dpi) { m_dpi = dpi; _fInitialized = true; }
  10. // Get screen DPI.
  11. int GetDPI() { _Init(); return m_dpi; }
  12. // Convert between raw pixels and relative pixels.
  13. int Scale(int x) { _Init(); return MulDiv(x, m_dpi, 96); }
  14. int UnScale(int x) { _Init(); return MulDiv(x, 96, m_dpi); }
  15. // Invalidate any cached metrics.
  16. void Invalidate() { _fInitialized = false; }
  17. private:
  18. void _Init()
  19. {
  20. if (!_fInitialized)
  21. {
  22. HDC hdc = GetDC(NULL);
  23. if (hdc)
  24. {
  25. m_dpi = GetDeviceCaps(hdc, LOGPIXELSX);
  26. ReleaseDC(NULL, hdc);
  27. }
  28. _fInitialized = true;
  29. }
  30. }
  31. private:
  32. bool _fInitialized;
  33. int m_dpi;
  34. };