У меня есть приложение C# Windows Forms, и я хотел бы, чтобы оно масштабировалось при изменении DPI без необходимости перезапуска приложения. В манифесте приложения у меня есть
<application xmlns="urn:schemas-microsoft-com:asm.v3">
<windowsSettings>
<dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware>
<dpiAwareness xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">permonitorv2,permonitor</dpiAwareness>
<!-- So it can dynamically update on new versions of Windows -->
</windowsSettings>
</application>
-->
В основном классе у меня есть:
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Mandelbrotverkenner());
}
, а в классе Mandelbrotverkenner у меня есть:
protected override void DefWndProc(ref Message message)
{
if (message.Msg == 0x02E0) // This should be the code for WM_DPICHANGED
{
Console.WriteLine("I have a breakpoint set here but it never triggers.");
}
// A breakpoint set here does trigger, plentily
base.DefWndProc(ref message);
}
Когда я измените dpi моего монитора (с помощью параметра Масштаб и разметка в Windows 10), Visual Studio изменяет масштаб, но точка останова не срабатывает (и ничего не записывается в консоль). Я на Windows 10, версия 1903, и у меня сложилось впечатление, что поддержка PerMonitor (не V2) была реализована в Windows 8.1, и поэтому должна работать в любой версии Windows 10. Прав ли я? в ожидании этого сообщения? Или это отправляется только на определенных машинах, или только при фактическом переключении мониторов, или ...? Изменить: На самом деле, видя, что другие приложения правильно масштабировать, я бы предположил, что сообщение действительно отправляется. В таком случае, почему это не получено моей формой?