我在考虑一致性。我在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>
3条答案
按热度按时间3qpi33ja1#
Windows 10/11似乎使用ShellMessageBox而不是MessageBox来显示简单的消息。ShellMessageBox自Windows XP以来一直可用,可以作为MessageBox的直接替代品调用。
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++调用中的不同。
laawzig23#
您可以使用VBScript(.vbs)来创建消息框。写下这个: