Чтобы масштабировать мое приложение WPF в соответствии с начальным DPI во время запуска, которое мне нужно. чтобы получить текущий DPI. И текущий DPI для окна всегда равен последнему DPI, отправленному WM_DPICHANGED.
вот мой код:
Код: Выделить всё
public partial class MainWindow : Window
{
private HwndSource hwndSource;
public MainWindow()
{
InitializeComponent();
}
protected override void OnSourceInitialized(EventArgs e)
{
hwndSource = PresentationSource.FromVisual((Visual) sender) as HwndSource;
hwndSource.AddHook(new HwndSourceHook(WndProc));
}
private const int WM_DPICHANGED = 0x02E0;
private IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
{
if (msg == WM_DPICHANGED)
{
handled = true;
}
return IntPtr.Zero;
}
}
Мне просто нужно найти последний DPI, отправленный WM_DPICHANGED. Если я каким-то образом отслежу это, то смогу легко масштабировать свое приложение в соответствии с этим. Итак, изначальной проблемы с DPI нет.
Я это знаю, я много говорю, и весь вопрос довольно запутанный. Итак, здесь я кратко излагаю вопрос и то, что я хочу в качестве ответа. Я разделил это на две части:
- Как отследить последний DPI, отправленный WM_DPICHANGED?
После получения последнего WM_DPICHANGED я хочу применить его в масштабировании моего интерфейса WPF, чтобы определялся начальный DPI и мое приложение масштабировалось само по себе, а не системой/ОС.
Подробнее здесь: https://stackoverflow.com/questions/786 ... ged-in-wpf