Opcion para activar DPIAwareness

User avatar
carlos vargas
Posts: 1815
Joined: Tue Oct 11, 2005 5:01 pm
Location: Nicaragua

Opcion para activar DPIAwareness

Post by carlos vargas »

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.

Code: Select all | Expand

#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)
User avatar
karinha
Posts: 8720
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil
Contact:

Re: Opcion para activar DPIAwareness

Post by karinha »

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
User avatar
carlos vargas
Posts: 1815
Joined: Tue Oct 11, 2005 5:01 pm
Location: Nicaragua

Re: Opcion para activar DPIAwareness

Post by carlos vargas »

ImageUsualmente 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.
Image
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)
User avatar
karinha
Posts: 8720
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil
Contact:

Re: Opcion para activar DPIAwareness

Post by karinha »

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
User avatar
leandro
Posts: 1828
Joined: Wed Oct 26, 2005 2:49 pm
Location: Colombia
Contact:

Re: Opcion para activar DPIAwareness

Post by leandro »

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/
[email protected]
[email protected]

[ Turbo Incremental Link64 6.98 Embarcadero 7.70 ] [ FiveWin 25.01 ] [ xHarbour 64 bits) ]
User avatar
carlos vargas
Posts: 1815
Joined: Tue Oct 11, 2005 5:01 pm
Location: Nicaragua

Re: Opcion para activar DPIAwareness

Post by carlos vargas »

agregar la seccion <asmv3:application>

Code: Select all | Expand

<?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)
toninhofwi
Posts: 183
Joined: Tue Oct 18, 2005 10:01 am

Re: Opcion para activar DPIAwareness

Post by toninhofwi »

Hi friends, I use this way:

HB_FUNC_STATIC( SETDPIAWARE )
{
hb_retl( ( BOOL ) SetProcessDPIAware() );
}

Cheers.
MGA
Posts: 1289
Joined: Mon Feb 25, 2008 2:54 pm
Location: Brasil/PR/Maringá
Contact:

Re: Opcion para activar DPIAwareness

Post by MGA »

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

HB_FUNC_STATIC( SETDPIAWARE )
{
hb_retl( ( BOOL ) SetProcessDPIAware() );
}
[email protected]

FWH24.04
BCC7.3
HARBOUR3.2
xMate
Pelles´C
TDolphin
toninhofwi
Posts: 183
Joined: Tue Oct 18, 2005 10:01 am

Re: Opcion para activar DPIAwareness

Post by toninhofwi »

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.
alvaro533
Posts: 231
Joined: Sat Apr 19, 2008 10:28 pm
Location: Madrid, España

Re: Opcion para activar DPIAwareness

Post by alvaro533 »

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:

Code: Select all | Expand

<!-- 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

alvaro533
Posts: 231
Joined: Sat Apr 19, 2008 10:28 pm
Location: Madrid, España

Re: Opcion para activar DPIAwareness

Post by alvaro533 »

toninhofwi wrote: Wed Sep 24, 2025 8: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.

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

Gracias Álvaro

User avatar
carlos vargas
Posts: 1815
Joined: Tue Oct 11, 2005 5:01 pm
Location: Nicaragua

Re: Opcion para activar DPIAwareness

Post by carlos vargas »

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)
User avatar
carlos vargas
Posts: 1815
Joined: Tue Oct 11, 2005 5:01 pm
Location: Nicaragua

Re: Opcion para activar DPIAwareness

Post by carlos vargas »

Code: Select all | Expand

#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)
User avatar
karinha
Posts: 8720
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil
Contact:

Re: Opcion para activar DPIAwareness

Post by karinha »

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
User avatar
carlos vargas
Posts: 1815
Joined: Tue Oct 11, 2005 5:01 pm
Location: Nicaragua

Re: Opcion para activar DPIAwareness

Post by carlos vargas »

karinha, funciona igual.

Salu2
Carlos Vargas
Desde Managua, Nicaragua (CA)
Post Reply