为什么我的消息框看起来与Windows 10显示的不同?

mgdq6dx1  于 2023-10-22  发布在  Windows
关注(0)|答案(3)|浏览(151)

我在考虑一致性。我在Visual Studio 2017构建的Windows子系统C/C++应用程序中使用MessageBox Windows API函数,如下所示:

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

这让我:

Windows显示的消息框,当我尝试使用“开始”菜单中的“运行”对话框运行无效程序,如下所示:

这显然不是一个显示塞子,但我很好奇,并感到惊讶,在这种程度的缺乏一致性的Windows,经过所有的版本,它经历了。是的,我知道有一个老鼠窝的向后兼容性,他们必须不断解决,但仍然。
这是否与我没有在清单文件中指定的一些设置有关,或者与我没有明确请求的一些常见控件样式有关?我的项目和解决方案设置是不变的,除了指定DPI感知为“每监视器DPI感知”。关闭后者仍然显示相同的消息框(尽管文本模糊,因为系统会缩放渲染的位图,如文档所示)。

VS在编译程序中嵌入的manifest

<?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>
3qpi33ja

3qpi33ja1#

Windows 10/11似乎使用ShellMessageBox而不是MessageBox来显示简单的消息。ShellMessageBox自Windows XP以来一直可用,可以作为MessageBox的直接替代品调用。

unftdfkk

unftdfkk2#

我不确定在你的“无效程序”场景中窗口显示的消息框是使用了消息框函数还是自定义对话框。
但是,为了实现一致性,也许你可以在这里找到答案:https://www.codeguru.com/cpp/w-p/win32/messagebox/article.php/c14605/Fancy-Custom-MessageBox.htm#page-2
此外,在这里https://references.microsoft.com/#system.windows.forms/winforms/managed/system/winforms/MessageBox.cs,e426 fc24 b 95 c791 e你会发现它是如何实现的-以及为什么消息框上的按钮与C++调用中的不同。

laawzig2

laawzig23#

您可以使用VBScript(.vbs)来创建消息框。写下这个:

Option Explicit

Dim x

x = MsgBox("Error opening log file for writing. Aborting", VbOkOnly+VbCritical, "Error")

相关问题