Почему мое окно сообщения отличается от того, что отображается в Windows 10? - PullRequest
0 голосов
/ 12 сентября 2018

Я думаю о последовательности.Я использую MessageBox функцию Windows API в моей C / C ++-подсистеме Windows, созданной Visual Studio 2017, например:

MessageBox(NULL, "Error opening log file for writing, aborting.", NULL, MB_ICONERROR);

Это дает мне:

My message box

Окно сообщения, отображаемое Windows, когда я, например, пытаюсь запустить недопустимую программу с помощью диалога «Выполнить» из меню «Пуск», выглядит следующим образом:

System message box

Это, очевидно, не ограничитель показа, но мне любопытно, и я удивлен таким уровнем несогласованности в 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>

1 Ответ

0 голосов
/ 12 сентября 2018

Я не уверен, что окно сообщений, отображаемое окнами в вашем сценарии «недопустимая программа», использует функцию MessageBox или настраиваемое диалоговое окно.
Однако, для достижения согласованности, возможно, вы найдете ответ здесь: https://www.codeguru.com/cpp/w-p/win32/messagebox/article.php/c14605/Fancy-Custom-MessageBox.htm#page-2

Также здесь https://referencesource.microsoft.com/#system.windows.forms/winforms/managed/system/winforms/MessageBox.cs,e426fc24b95c791e вы найдете, как это реализовано - и почему кнопка в окне сообщения отличается от кнопки вызова C ++.

...