Я думаю о последовательности.Я использую MessageBox
функцию Windows API в моей C / C ++-подсистеме Windows, созданной Visual Studio 2017, например:
MessageBox(NULL, "Error opening log file for writing, aborting.", NULL, MB_ICONERROR);
Это дает мне:
Окно сообщения, отображаемое Windows, когда я, например, пытаюсь запустить недопустимую программу с помощью диалога «Выполнить» из меню «Пуск», выглядит следующим образом:
Это, очевидно, не ограничитель показа, но мне любопытно, и я удивлен таким уровнем несогласованности в Windows, после всех версий, через которые он прошел.Да, я знаю, что у крыс есть гнездо обратной совместимости, к которому они должны постоянно обращаться, но все же.
Это связано с некоторыми настройками, которые я не указал в моем файле манифеста, с некоторыми общими стилями управления, которые яявно не запрашиваю?Мои настройки проекта и решения не затрагиваются, за исключением того, что параметр DPI Awareness указан как «Для каждого DPI DPI монитора».Отключение последнего по-прежнему показывает то же окно сообщения (хотя и с размытым текстом, потому что система масштабирует визуализированное растровое изображение, как описано в документации).
Манифест, встроенный VS в встроенную программу
<?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">
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="asInvoker" uiAccess="false"></requestedExecutionLevel>
</requestedPrivileges>
</security>
</trustInfo>
<asmv3:application>
<asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
<dpiAware>true</dpiAware>
<dpiAwareness xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">PerMonitorV2, PerMonitor</dpiAwareness>
</asmv3:windowsSettings>
</asmv3:application>
</assembly>