FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Opcion para activar DPIAwareness
Posts: 1789
Joined: Tue Oct 11, 2005 05:01 PM
Opcion para activar DPIAwareness
Posted: Fri Aug 15, 2025 12:04 AM
usualmente la mejora visual para los monitores de gran resolucion requiere que agregemos unas lineas en el manifest file de nuestra app, pero existe otra posibilidad, y es esta:
repito, esta es una opción, lo recomendado por MS es el manifest, pero es interesante conocerla.
#define PROCESS_DPI_UNAWARE                     0
#define PROCESS_SYSTEM_DPI_AWARE            1
#define PROCESS_PER_MONITOR_DPI_AWARE   2
...
procedure main()
  ...
  SetDPIAwareness( PROCESS_PER_MONITOR_DPI_AWARE   )
  ...
return
  
#pragma BEGINDUMP

#include <windows.h>
#include <shellscalingapi.h>

HB_FUNC( SETDPIAWARENESS )
{
    hb_retnl( (HB_LONG) SetProcessDpiAwareness( (PROCESS_DPI_AWARENESS) hb_parni(1) ) );
}
IMPORTANTE: se debe agreagr la libreria shcore.lib del compilador c
Salu2

Carlos Vargas

Desde Managua, Nicaragua (CA)
Posts: 8523
Joined: Tue Dec 20, 2005 07:36 PM
Re: Opcion para activar DPIAwareness
Posted: Fri Aug 15, 2025 02:59 PM

Maestro Carlos, perdón por mi tontería pero ¿en qué resolución de video sería necesario esto?

Gracias, tks.

Regards, saludos.

João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 1789
Joined: Tue Oct 11, 2005 05:01 PM
Re: Opcion para activar DPIAwareness
Posted: Fri Aug 15, 2025 05:01 PM
Usualmente cuando la escala es mayor a 1 Windows intenta hacer un escalado de los controles, bitmaps, fuentes, etc. Quedando un efecto blur, por ello se usa el dpiawarenessen el manifest, está sería otra posibilidad de hacerlo.
De echo es necesario hacerlo siempre, nunca sabemos donde se ejecutará nuestra app.

En este caso la escala es de 1.5-> 150%, con esta conf nuestra app si no tiene activado el dpiaware se vería un poco borroso.
Salu2

Carlos Vargas

Desde Managua, Nicaragua (CA)
Posts: 8523
Joined: Tue Dec 20, 2005 07:36 PM
Re: Opcion para activar DPIAwareness
Posted: Fri Aug 15, 2025 06:01 PM

Entendido. Hago lo siguiente: establezco la resolución de pantalla en 1024 x 768 y 1280 x 768. En la configuración del sistema, el usuario puede elegir entre estas dos pantallas creadas en Workshop.exe. De esta forma, la visión del usuario no se ve afectada por una resolución exagerada.

Gracias, tks.

Regards, saludos.

João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 1818
Joined: Wed Oct 26, 2005 02:49 PM
Re: Opcion para activar DPIAwareness
Posted: Wed Sep 17, 2025 03:04 PM

Amigo Carlos buenos días como estas?

Y el código de manifest, sabes como debe ir? lo podrias compartir?

Saludos
LEANDRO AREVALO
Bogotá (Colombia)
https://hymlyma.com
https://hymplus.com/
leandroalfonso111@gmail.com
leandroalfonso111@hotmail.com

[ Turbo Incremental Link64 6.98 Embarcadero 7.70 ] [ FiveWin 25.01 ] [ xHarbour 64 bits) ]
Posts: 1789
Joined: Tue Oct 11, 2005 05:01 PM
Re: Opcion para activar DPIAwareness
Posted: Fri Sep 19, 2025 10:50 PM
agregar la seccion <asmv3:application>
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">

  <asmv3:application>
    <asmv3:windowsSettings>
      <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true/pm</dpiAware>
      <dpiAwareness xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">PerMonitorV2</dpiAwareness>
    </asmv3:windowsSettings>
  </asmv3:application>

 ....

  <dependency>
    <dependentAssembly>
      <assemblyIdentity
        type="win32"
        name="Microsoft.Windows.Common-Controls"
        version="6.0.0.0"
        publicKeyToken="6595b64144ccf1df"
        language="*"
        processorArchitecture="*"/>
    </dependentAssembly>
  </dependency>

....
Salu2

Carlos Vargas

Desde Managua, Nicaragua (CA)
Posts: 182
Joined: Tue Oct 18, 2005 10:01 AM
Re: Opcion para activar DPIAwareness
Posted: Mon Sep 22, 2025 11:34 AM

Hi friends, I use this way:

HB_FUNC_STATIC( SETDPIAWARE )

{

hb_retl( ( BOOL ) SetProcessDPIAware() );

}

Cheers.

Posts: 1286
Joined: Mon Feb 25, 2008 02:54 PM
Re: Opcion para activar DPIAwareness
Posted: Tue Sep 23, 2025 08:54 PM

En nuestros programas que utilizan fivewin, ¿deberíamos usar esto?

HB_FUNC_STATIC( SETDPIAWARE )

{

hb_retl( ( BOOL ) SetProcessDPIAware() );

}

ubiratanmga@gmail.com

FWH24.04
BCC7.3
HARBOUR3.2
xMate
Pelles´C
TDolphin
Posts: 182
Joined: Tue Oct 18, 2005 10:01 AM
Re: Opcion para activar DPIAwareness
Posted: Wed Sep 24, 2025 08:31 AM
En nuestros programas que utilizan fivewin, ¿deberíamos usar esto?
Cuando utilices esto, tendrás que realizar las rutinas de escalado de pantallas basadas en cada resolución, la ventaja es que desaparece el efecto blur típico del escalado de Windows. La desventaja es que todo queda en nuestras manos.
Posts: 230
Joined: Sat Apr 19, 2008 10:28 PM
Re: Opcion para activar DPIAwareness
Posted: Wed Nov 12, 2025 10:28 PM

Hola a todos,

Tengo un monitor 4k escalado al 150% o 175% . Para que los textos no se vean borrosos en las aplicaciones de fwh64 he puesto esto en el manifiesto, como decía Carlos:

<!-- Configuración de DPI para Windows 10/11 -->
  <asmv3:application>
    <asmv3:windowsSettings>
      <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true/pm</dpiAware>
      <dpiAwareness xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">PerMonitorV2</dpiAwareness>
    </asmv3:windowsSettings>
  </asmv3:application>

Ahora las letras se ven muy nítidas, pero demasiado pequeñas. ¿Cómo puedo solucionarlo?

Muchas gracias y un saludo,

Alvaro

Posts: 230
Joined: Sat Apr 19, 2008 10:28 PM
Re: Opcion para activar DPIAwareness
Posted: Thu Nov 13, 2025 09:53 PM
toninhofwi wrote:

En nuestros programas que utilizan fivewin, ¿deberíamos usar esto?

Cuando utilices esto, tendrás que realizar las rutinas de escalado de pantallas basadas en cada resolución, la ventaja es que desaparece el efecto blur típico del escalado de Windows. La desventaja es que todo queda en nuestras manos.

Hola. Podrías compartir las rutinas de escalado de las que hablas? Has modificado la clase Window?

Gracias Álvaro

Posts: 1789
Joined: Tue Oct 11, 2005 05:01 PM
Re: Opcion para activar DPIAwareness
Posted: Tue Nov 18, 2025 04:08 PM

Con el asunto de las letras pequeñas, se debe crear la fuente en base al dpi actual. En un rato pongo el codigo que tengo.

Salu2

Carlos Vargas

Desde Managua, Nicaragua (CA)
Posts: 1789
Joined: Tue Oct 11, 2005 05:01 PM
Re: Opcion para activar DPIAwareness
Posted: Tue Nov 18, 2025 04:33 PM
#include "Fivewin.ch"
#include "Common.ch"

PROCEDURE Main()
	LOCAL oWnd, oIco, oFnt
	PRIVATE nDpi
	 	
nDpi := GetDpiForSystem()		
	
DEFINE ICON oIco NAME "A"

DEFINE FONT oFnt NAME "Tahoma" SIZE 0, ScaleFontSize( -12, nDpi )

DEFINE WINDOW oWnd TITLE "Prueba MyBox" SIZE 600, 400 ICON oIco PIXEL

oWnd:SetFont( oFnt )
...
/*----------------------------------------------------------------------------*/

DLL32 FUNCTION GetDpiForSystem() AS LONG PASCAL LIB "User32.dll"

/*----------------------------------------------------------------------------*/

FUNCTION ScaleFontSize( nBaseSize, nDpi )
RETURN Int( nBaseSize * nDpi / 96 )

/*----------------------------------------------------------------------------*/
Salu2

Carlos Vargas

Desde Managua, Nicaragua (CA)
Posts: 8523
Joined: Tue Dec 20, 2005 07:36 PM
Re: Opcion para activar DPIAwareness
Posted: Tue Nov 18, 2025 05:28 PM

Maestro Carlos Vargas, disculpe mi ignorancia, pero si entendí bien su ejemplo, esto funciona para una ventana, ¿pero qué pasa con los DIÁLOGOS? ¿Podría mostrarnos cómo se vería con imágenes, por favor?

Gracias, tks.

Regards, saludos.

João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 1789
Joined: Tue Oct 11, 2005 05:01 PM
Re: Opcion para activar DPIAwareness
Posted: Tue Nov 18, 2025 10:39 PM

karinha, funciona igual.

Salu2

Carlos Vargas

Desde Managua, Nicaragua (CA)