想读取一个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转为行偏移
...
剩下的就容易办了,完美解决。