读取ES_MULTILINE样式的EDIT的一部分Text

想读取一个Multi-Line EDIT从第N个TCHARS开始,长度为L的一段TEXT,怎么做呢?
当然最简单的办法可以先把整个EDIT里面的Text都读取出来,然后就可以直接定位了,但是如果EDIT里面的Text很大,那么这个办法将需要申请较大的内存,这是我这个偏执狂是不允许。

我原本的定位起始行代码如下:

l0表示第N个字符。


count = Edit_GetLineCount(hwnd);
for (i = 0; i < count; i++)
{
l1 = Edit_LineLength(hwnd, Edit_LineIndex(hwnd, i));


// 2是_T("\r\n")

if (l0 > l1 + 2)
{
l0 -= l1 + 2;
}
else
{
break;
}
}
使用了好久,都不知道有问题。今天遇到计算结果错误的情况。
原来在EDIT不显示水平滚动条的时候,一行过长,EDIT自动换行了,之前的代码却当作回车换行。
导致计算结果不正确。
怎么样才知道一行是EDIT为了显示换行,还是回车换行呢?
群里面问,网上搜索了挺久,都找不到答案。用SDK的人可能太少了。或者搜索不得要领。
最后反复的看MSDN,并看日志记录的偏移。
"Salvation lies within."
Edit_LineIndex这个宏有玄机.它获得的是某行第一个TCHAR在整个Text中的偏移。
于是修改的代码如下:
l2 = 0;
count = Edit_GetLineCount(hwnd);
for (i = 0; i < count; i++)
{
l1 = Edit_LineIndex(hwnd, i);

if (l0<=l1)
{
break;
}
l2 = l1;

}

if(l0>0)

{

i--;

}

l0 -= l2; // 由整段Text转为行偏移

...
剩下的就容易办了,完美解决。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值