首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Win98和WinXP (或更高版本)之间的Windows差异

Win98和WinXP (或更高版本)之间的Windows差异
EN

Stack Overflow用户
提问于 2022-07-03 06:02:04
回答 2查看 94关注 0票数 0

我有一个在Win98上运行良好的游戏(我没有源代码),但是在WinXP或更高版本(即WinXP/7/8/10)上,某些场景中的文本缺失了。顺便说一句:这与语言或区域设置无关,因为我在Win98和WinXP (或更高版本)上都将它们设置为相同的值。

游戏本身不检查Windows版本,所以我非常肯定这个问题是由Windows自Win98以来的内部变化引起的。

我找不到任何描述每个Windows版本之间GDI变化或差异的Microsoft正式文档。有没有人有类似的经验,可能会对这个问题有所了解?

PS:我也尝试过在兼容设置中覆盖Windows版本到Windows 98,甚至Windows 95,但它们都没有帮助。

PPS:我试着调试这个问题,我可以看到文本确实被打印到GDI位图上,但不知何故没有正确地呈现到屏幕上。这是我无法理解的部分,因为游戏在Win98和WinXP (或更高版本)上运行相同的代码。

PPPS:我花了更多的时间在调试上,发现问题出在SRCPAINT的StretchDIBits()中。源DIB是黑色背景上的白色文本。此函数返回时没有出错,但实际上并没有呈现到目标DC上。当我将模式从SRCPAINT更改为SRCCOPY时,文本就会显示出来(后台也会被黑色覆盖,这是预期的)。似乎WinXP或更高版本的SRCPAINT内部出了问题。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-07-03 15:00:51

不管怎么说,我自己终于找到了根源。

在Win98上,当使用SRCPAINT模式调用StretchDIBits()时,源DIB的xSrc、ySrc总是将左下角视为源源。

但是,在WinXP或更高版本上,当使用SRCPAINT模式调用StretchDIBits()时,源DIB的xSrc、ySrc对原点的处理方式有所不同。如果DIB是自底向上的(正高度),则源原点位于左下角;如果DIB是自顶向下的(负高度),则源原点位于左上角。

票数 3
EN

Stack Overflow用户

发布于 2022-07-03 06:04:45

您是否尝试过Windows的兼容性模式?有关示例,请参见http://what-when-how.com/windows-xp/using-program-compatibility-modes-in-windows-xp/

我问这个问题的原因是,这是找出问题所在的一个重要步骤。如果它在应用shim (即兼容性模式)时工作,那么问题可能是GDI的更改,正如您所说的。否则,Windows的兼容性模式将无法解决此特定问题,或者问题在别处。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72847109

复制
相关文章
如何从 Python 中的字符串列表中删除特殊字符?
在进行字符串处理和文本分析时,有时我们需要从字符串列表中删除特殊字符。特殊字符可能是空格、标点符号、换行符等,在某些情况下它们可能干扰我们的文本处理或分析任务。Python 提供了多种方法来删除字符串列表中的特殊字符。本文将详细介绍在 Python 中删除字符串列表中特殊字符的几种常用方法,并提供示例代码帮助你理解和应用这些方法。
网络技术联盟站
2023/06/01
8.5K0
在字符串中删除特定的字符
题目:输入两个字符串,从第一字符串中删除第二个字符串中所有的字符。例如,输入”They are students.”和”aeiou”,则删除之后的第一个字符串变成”Thy r stdnts.”。 首先我们考虑如何在字符串中删除一个字符。由于字符串的内存分配方式是连续分配的。我们从字符串当中删除一个字符,需要把后面所有的字符往前移动一个字节的位置。但如果每次删除都需要移动字符串后面的字符的话,对于一个长度为n的字符串而言,删除一个字符的时间复杂度为O(n)。而对于本题而言,有可能要删除的字符的个数是n,因此该
猿人谷
2018/01/17
9.1K0
正则表达式中的特殊字符
一个正则表达式可以由简单的字符构成,比如 /abc/,也可以是简单和特殊字符的组合,比如 /ab*c/ 。其中特殊字符也被称为元字符,在正则表达式中是具有特殊意义的专用符号,如 ^ 、$ 、+ 等。
清出于兰
2020/10/26
2.2K0
正则表达式中的特殊字符
C#如何删除字符串中任何位置的空格?
你或许知道你能使用String.Trim()方法,去除字符串的头和尾的空格。不幸运的是,这个Trim方法不能去除字符串中间的C#空格。
高一峰
2020/09/22
11.8K0
C#如何删除字符串中任何位置的空格?
web.config中配置字符串中特殊字符的处理
配置文件中往往要用到一些特殊的字符,                Web.Config默认编码格式为UTF-8,对于XML文件,要用到实体转义码来替换。对应关系如下: 字符 转义码 & 符号 & &amp; 单引号 ' &apos; 双引号 " &quot; 大于 > &gt; 小于 < &lt; [引用:http://www.cnblogs.com/zzmzaizai/archive/2008/01/30/1059191.html]
磊哥
2018/05/09
2.5K0
算法-删除字符串中的公共字符
该文讲述了如何删除字符串中的公共字符,通过创建一个hash表来存储字符串中每个字符的出现次数,然后遍历字符串,将不需要删除的字符保留,需要删除的字符则用另一个数组存储,最后将修改后的字符串全部替换回来。这种方法的时间复杂度为O(n),空间复杂度为O(256)
chaibubble
2018/01/02
3.7K0
算法-删除字符串中的公共字符
Python从字符串中删除字符
Sometimes we want to remove all occurrences of a character from a string. There are two common ways to achieve this.
全栈程序员站长
2022/09/01
5.9K0
删除字符串中的子串
输入2个字符串S1和S2,要求删除字符串S1中出现的所有子串S2,即结果字符串中不能包含S2。
叶茂林
2023/07/28
3050
删除字符串中的子串
【说站】python如何删除字符串的特殊字符
Python的str是不可改变的,所以这三种方法只是返回字符串前后空白被删除后的副本,而不会改变字符串本身。
很酷的站长
2022/11/23
3.1K0
【说站】python如何删除字符串的特殊字符
Python字符串中删除特定字符的方法
这篇文章主要介绍了Python字符串中删除特定字符的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 分析
全栈程序员站长
2022/06/28
6.6K0
Python字符串中删除特定字符的方法
python中删除特定字符串
import re text = ‘wo,didi;wode,;wode’ text0 = text.replace(‘didi’, ”) print(re.sub(‘[,;]’, ‘ ‘, text0))
全栈程序员站长
2022/09/02
3.4K0
python:过滤字符串中的字母数字特殊
字符串.isalnum()  所有字符都是数字或者字母,为真返回 Ture,否则返回 False。 字符串.isalpha()   所有字符都是字母,为真返回 Ture,否则返回 False。 字符串.isdigit()     所有字符都是数字,为真返回 Ture,否则返回 False。 字符串.islower()    所有字符都是小写,为真返回 Ture,否则返回 False。 字符串.isupper()   所有字符都是大写,为真返回 Ture,否则返回 False。 字符串.istitle()      所有单词都是首字母大写,为真返回 Ture,否则返回 False。 字符串.isspace()   所有字符都是空白字符,为真返回 Ture,否则返回 False。
py3study
2020/01/19
3.4K0
C#正则表达式判断字符串中是否有数…
                int count = Regex.Matches(test, @"\d").Count;
恋喵大鲤鱼
2018/08/03
5730
C#正则表达式判断字符串中是否有数…
                int count = Regex.Matches(test, @"\d").Count;
恋喵大鲤鱼
2019/02/22
1.3K0
[译]C#和.NET中的字符串
原文地址:Jon Skeet:Strings in C# and .NET System.String 类型(在C#语言中对应的别名是string)是.NET最重要的类型之一,不幸的是在它身上存在了太
潘成涛
2018/01/18
2.5K0
SAS删除字符串中的重复项
SAS程序猿/媛有时候会碰到去除字符串中重复值的问题,用常用的字符函数如SCAN,SUBSTR可能会很费劲,用正则表达式来处理就简单了。示例程序如下:
专业余码农
2020/07/15
5.3K0
Mysql去除字符串中的特殊字符及varchar转int
Mysql中有varchar类型字段,并且为:123,456 形式,需要对其进行排序,并根据条件筛选出前5条
itze
2022/10/31
3.6K0
如何使用JavaScript从字符串中删除HTML标签?
我们可以使用以下示例从带有 JavaScript 的字符串中删除 HTML 标签 -
很酷的站长
2022/12/04
13K0
如何使用JavaScript从字符串中删除HTML标签?
正则表达式中的特殊字符一览[通俗易懂]
〓简介〓 字符意义:对于字符,通常表示按字面意义,指出接着的字符为特殊字符,不作解释。 例如:/b/匹配字符’b’,通过在b 前面加一个反斜杠,也就是/b/,则该字符变成特殊字符,表示匹配一个单词的分界线。或者:对于几个字符,通常说明是特殊的,指出紧接着的字符不是特殊的,而应该按字面解释。例如:*是一个特殊字符,匹配任意个字符(包括0个字符);例如:/a*/意味匹配0个或多个a。为了匹配字面上的*,在a前面加一个反斜杠;例如:/a*/匹配’a*’。
全栈程序员站长
2022/08/31
5.2K0
java中字符串分割特殊字符处理_java字符串按照特定字符分割
String类型的对象在用split()方法进行字符分割的时候常常会遇到用特殊字符进行分割的情况,看JDK知道split()实际上是用的正则实现的分割,当遇到一些用特殊字符作为分割标志的时候,不使用特殊手段就会抛出java.util.regex.PatternSyntaxException异常,比如用java中的运算符号,括号等等这个时候可以使用split(“[*]”) split(“//+”)来实现特殊字符作为分割标志,[]和//就是用来解决这些问题的,但是有个例外,那就是 / ,这个符号比较麻烦,比如你的字符串是 aaa/bbb,由于在java的字符串中/ 要用//表示所以aaa/bbb用String类型的对象存放就是“aaa//bbb”,而且由于分割的时候还要转义一次所以还要多两个//,所以分割的时候就变成 split(“”)或split(” [ ]”),这才表示用一个/做分割标志。
全栈程序员站长
2022/11/11
6.2K0

相似问题

C#从字符串中删除特殊字符

14

如何从字符串中删除日语字符?

14

从C#中的字符串中删除特殊字符列表

53

从字符串c#中删除所有特殊字符

58

在python中删除字符串中的特殊字符

123
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文