A Microsoft afirma que o MapDialogRect converte DLUs em pixels usando os coeficientes baseunitX/4 e baseunitY/8 retornados por GetDialogBaseUnits .
Entretanto, não vejo esses coeficientes em meus testes.
Por exemplo, tenho um botão de 50x14 DLUs em um diálogo usando fonte MS Shell Dlg (8x16). A escala de exibição é 100%, a percepção de DPI não está habilitada para o processo.
Chamando GetDialogBaseUnits, obtenho 8 para X e 16 para Y, então os coeficientes devem ser 2,2.
Mas chamando MapDialogRect para um retângulo de 50x14 DLUs, obtenho um retângulo de 75x23 pixels, então os coeficientes reais são 1,5,1,5. O tamanho do botão em pixels é o mesmo.
Testei isso no XP, Win 7 e Win 10, com os mesmos resultados.
Por que os coeficientes usados por MapDialogRect não correspondem às unidades base retornadas por GetDialogBaseUnits?
De acordo com o blog fornecido por Luke: GetDialogBaseUnits é uma porcaria