1
5
这通常是对话框模板的一个错误。这并不是一个消息框错误。 例如,在Visual Studio中创建默认的win32应用程序。在.rc文件中,将about框模板中的标题更改为
到
当您显示about框时,错误就会显现出来。
在
DLGTEMPLATEEX documentation
请注意,菜单和类名具有类型
Windows错误地将类似的方案应用于对话框标题:如果第一个字符是
换句话说,Windows正在查找标题字符串中的字体信息。在大多数情况下,这不会指定有效的字体,因此Windows默认为系统字体。 为了证明这一点,我在内存中构建了一个对话框模板( based on this ). 工作完成后,我删除了将字体信息写入模板的代码,并使用了对话框标题“a\xd\x200\x21SimSun”。这将以斜体SimSun显示对话框,因为windows正在从标题字符串中读取字体信息。 这个错误很可能是16位Windows的遗留问题,(我猜)0xFF被用作资源ID标记。 |
2
3
一只奇怪的虫子。我怀疑这些症状是
在内部,
因此,对话框模板的内存布局的字体规范紧跟在对话框标题之后。
Visual Basic不使用Unicode,因此您调用的函数实际上是
我相信,由于某种原因,该字符串从多字节到Unicode的转换要么出错,要么返回了一个虚假的长度值。当对话框模板构建在内存中时,这会产生连锁反应,破坏标题字符串后面的内存——正如我们所知,这就是字体规范。 |
monstr · MessageBox不聚焦 8 年前 |
user1580348 · 检测MessageBox中的帮助按钮点击? 9 年前 |
lukas31 · Visual Basic:单击按钮时消息框提示两次 10 年前 |
Ethon · SWTBot-等待MessageBox 10 年前 |
flarn2006 · 有人听说过标准Windows消息框中的这个奇怪错误吗? 11 年前 |
meowmeowbeans · 修改Windows窗体最上面的属性 11 年前 |