看来还是没说清楚。举个例子:比如要输出“我是中国人。”,而这个窗口只有五个汉字宽,要是不进行标点处理,会输出成:
    我是中国人
    。
但实际上DrawText()会输出成:
    我是中国
    人。
我是想得到第一行的字节数。最好不要自己判断逗号、句号什么的。另外还要考虑到日语、韩语等文字。谢谢。

解决方案 »

  1.   

    不知GetTextExtentPoint32這個函數會不會有所幫助?
      

  2.   

    要考滤到你的文本是ascii还是unicode 的吧?一般是要分开写的
      

  3.   

    GetTextExtentPoin32() 也不行。
    我没有使用 UNICODE。
      

  4.   

    to ddddh:>0xa0的就是中文?太好了,我知道了,谢谢(查书都查不到)
    还有,TEXT文本结束符到底是什么?我用CFile由于没有EOF函数,很麻烦。to ab,闪烁问题我已经解决了,不过我现在的编辑器还有点问题,主要是水平滚动条在回退键和del键的处理问题,连notepad对这个都有问题!vc++IDE就更绝了,水平滚动条总也是那么长!!
      

  5.   

    to ab:
    DrawText我没有用过,不过可想而知,DrawText必然最后是调用TextOut,
    然而,DrawText的“智慧”是建立在编程者对“标点”的定义上去的。如果有什么地方的标点没有被他考虑在内,出的错误将会是耐人寻味的。
      

  6.   

    to gameboy99:
        我在中文 Windows 下显示日文文字,发现标点调整不正确,大概 DrawText() 也有什么中文版、日文版。你是怎么处理自动换行的?自己判断标点?我统计了一下中文 Windows 版DrawText() 对简体中文的标点处理,不能领行的大概有 60 个左右,除了一些标点外,还有奇怪的  ̄︶︺﹀︾﹂﹄︼︸︱︳︴等。这些东西你怎么处理的?是自己计算,然后 TextOut() 吗?
      

  7.   

    我哈,还没考虑过标点换行的问题,因为我用了水平滚动条呀,再说我的目标是实现VC++ IDE的功能,它也没有标点换行的要求。
    至于真的要想“自动”处理标点换行的问题,那当然得自己计算了,编这玩意真的要好多算法,我头都大了:)
    估计它的原理就是先
    CRect rect;
    GetClientRect(&rect);
    CPaintDC dc(this);
    dc.seletobject......
    .....
    ....
    CString string;//这个是你要输出的内容
    ....
    ....
    输出一行时先判断
    for(int pos=0;(dc.gettextextent(string,pos)>rect.width()||(pos>string.getlength());pos++);
    while((string.getat(pos)!=你的标点)||pos)//pos!=0;
       pos--;
    dc.TextOut(xxxx,xxx,string,pos);
    string=string.right(string.getlength()-pos);诸如此类的判断,必然是一大堆一大堆的,当然上面只是随便写写,完全没有解决你的问题,不过思路是在的。
      

  8.   

    天,连条件都写错了:(
    算了,反正这玩意看你怎么实现的。
    对了,我的每行都是一个列表,
    但具我分析,windows里的editbox都是把文本放在一个字符数组里的,所以就出现了64k的限制。而且它已被固化为标准控件了。
      

  9.   

    不支持换行?本来我想要你的程序看看,既然这样就...
    你的字符串用的是 CString 类?那样不会有什么后遗症?比如速度、长度限制甚至 CString 擅自修改字符串之类的问题。
      

  10.   

    呵呵,Great minds think alike!:)
    我也就是这样的,我每段的文字都是一个类,叫什么LineInfo,
    事实上我整个文本也是一个类,叫TextInfo....它其实就相当于Document。(我没有用Doc/View)结构。