RichEdit控件在处理EM_REPLACESEL消息中有bug?附一种解决办法

在使用RichEdit控件处理某些命令(如ping)的执行结果时,会出现换行符被错误地替换为空格的问题,导致所有输出显示在同一行。本文详细介绍了这一现象的原因,并提供了一种解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

RichEdit控件在处理EM_REPLACESEL消息中有bug?附一种解决办法

Purple Endurer 原创
2007-10-27 第1

在 CmdShell 和 bat_do 中,命令的执行结果会通过EM_REPLACESEL消息添加到RichEdit控件编辑框中,但 ping 等一些命令的执行结果添加到RichEdit控件编辑框中会显示在同一行。

经对比分析ping 等一些命令的执行结果和添加到RichEdit控件编辑框中的结果,发现出现问题的原因在于:ping 等一些命令的执行结果中有一些换行符为 0dh, 0dh, 0ah,这些换行符在添加到 RichEdit控件编辑框的过程中,会被替换为 020h(即空格),于是所有的结果就显示在同一行了。

我的一种解决办法是对ping 等一些命令的执行结果进行处理,把0dh, ……, 0dh,换为 0dh。相应代码为:

;--- Check & skip 0dh series
; buffer--保存命令处理结果的内存首地址
; bytesRead--命令处理结果长度(字节)
lea esi, buffer
mov edi, esi
add bytesRead, esi
xor eax, eax;AL--当前字符, AH--前一字符
@TranBegin:
cmp esi, bytesRead
jg @TranEnd

mov al, byte ptr [esi]
cmp al, 0dh
jne @TranCopy
cmp ah, 0dh
jne @SkipTran
@TranCopy:
mov byte ptr [edi], al
inc edi
@SkipTran:
mov ah, al
inc esi
jmp @TranBegin
@TranEnd:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值