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

来源:互联网 发布:代销下单与传淘宝 编辑:程序博客网 时间:2024/05/24 02:24

想读取一个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转为行偏移

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

0 0
原创粉丝点击