Когда следует отправлять WM_DPICHANGED? - PullRequest
0 голосов
/ 01 февраля 2020

У меня есть приложение 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. Прав ли я? в ожидании этого сообщения? Или это отправляется только на определенных машинах, или только при фактическом переключении мониторов, или ...? Изменить: На самом деле, видя, что другие приложения правильно масштабировать, я бы предположил, что сообщение действительно отправляется. В таком случае, почему это не получено моей формой?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...