본문 바로가기
MFC

[MFC] DPI Scale

by Jcoder 2022. 9. 21.

Windows SDK 8.1 미만 코드. 그 이상으로 필요시 https://learn.microsoft.com/ko-kr/windows/win32/api/winuser/nf-winuser-getdpiforwindow 해당 함수 사용.

 

GetDpiForWindow function (winuser.h) - Win32 apps

Returns the dots per inch (dpi) value for the specified window.

learn.microsoft.com

void CTestDlg::InitializeDPIScale(HWND hwnd)
{
	CDC* pDC = GetDC();
	m_fDPIScaleX = GetDeviceCaps(pDC->GetSafeHdc(), LOGPIXELSX) / 96.0f;
	m_fDPIScaleY = GetDeviceCaps(pDC->GetSafeHdc(), LOGPIXELSY) / 96.0f;

	if (m_fDPIScaleX == 0.96f)
	{
		m_fDPIPercent = 1.0f;
	}
	else if (m_fDPIScaleX == 1.20f) // 125%
	{
		m_fDPIPercent = 1.25f;
	}							    
	else if (m_fDPIScaleX == 1.44f) // 150%
	{
		m_fDPIPercent = 1.50f;
	}
	else if (m_fDPIScaleX == 1.68f) // 175%
	{							    
		m_fDPIPercent = 1.75f;
	}
	else if (m_fDPIScaleX == 1.92f) // 200%
	{
		m_fDPIPercent = 2.00f;
	}							   
	else if (m_fDPIScaleX == 2.16f) // 225%
	{
		m_fDPIPercent = 2.25f;
	}
	else if (m_fDPIScaleX == 2.40f) // 250%
	{							    
		m_fDPIPercent = 2.50f;
	}
	else if (m_fDPIScaleX == 2.88f) // 300%
	{
		m_fDPIPercent = 3.00f;
	}
	else if (m_fDPIScaleX == 3.36f) // 350%
	{
		m_fDPIPercent = 3.50f;
	}
}