我正在使用Embarcadero RAD Studio C ++ Builder XE7在Windows 7系统上开发应用程序。我正在尝试使我的应用程序DPI之一。为此,我需要重现以下行为之一:
使用清单文件,我可以在应用程序中完美再现这3种情况。
但是,我想在运行时从应用程序内部选择应用程序的行为方式。例如,我想使用如下命令行打开我的应用程序:
C:> MyApp.exe / DPIBehavior = [已忽略,已虚拟化,已缩放]
我注意到Windows SDK提供了一些实现此目的的功能。由于我仍在Windows 7上进行开发,因此我无法使用或测试SetProcessDPIAwareness()函数,因为在Windows 8.1之前不可用,因此我尝试使用SetProcessDPIAware()函数。
我注意到该功能可以很好地停止Windows虚拟化过程。但是,即使我的表单属性上的Scaled属性设置为true,我的表单也不再缩放。我在这里指定我编译了2个不同版本的应用程序,一个版本在主菜单上启用了Scaled属性,另一个版本不启用,但是两者都需要尽快调用SetProcessDPIAware()函数。
我在192 dpi下测试了这些应用程序版本。由于它们产生的结果完全相同,即大小完全相同的用户界面,因此我推断使用SetProcessDPIAware()函数时缩放无法正常工作。另一方面,当我使用清单文件而不是调用SetProcessDPIAware()函数运行完全相同的应用程序时,我得到了预期的结果:一个应用程序被缩放,另一个没有缩放。
有人可以向我解释如何在保持TForm缩放的同时使用SetProcessDPIAware()函数吗?还是XE7错误?