用DrawText绘制一句文本,
用来测试的文本是“文本000aaabbbccc9900a”,目标位图的宽度放不下这些字符,从9那个被截掉了(如图1).
图片见:http://javenreal.googlepages.com/break.htm加上了“DT_WORDBREAK”后,换行倒是换了,但没有按预期从9那里换,而是从0那里就换了(如图2).用了传说中的“DT_EDITCONTROL” 也没有起色。
用了DrawTextEx,效果和不带Ex的相同。谁有办法让DrawText严格按照“字符”换行,而不要按照“单词”换行??其实这个问题应该有很多人遇到过,不知道有没有人解决。另,我是在c#里边用,c#找不到方法所以用vc试试,如果有人能直接在c#下解决更好!

解决方案 »

  1.   

    “文本000aaabbbccc9900a”,中间直接用换行符号\n不就行了
      

  2.   

    ==========================
    因为每个字符的宽度是固定的,
    ==========================
    您这话说得好像太随意了吧?并不是所有的字体宽度都是固定的。========================
     回复人:liuxiuk() ( 二级(初级)) 信誉:100  2007-07-11 20:05:02  得分:0

    ls 的是正解..
    ========================
    你这个跟风不动脑筋的更可恶
      

  3.   

    那你想到底精确到什么地步??
    你能保证你的位图的宽度刚好能容纳你字符串的一段?
    你不赚麻烦就用getcharwidth32或是其它的方法一个字符一个字符的计算吧
      

  4.   

    combine the second one with DT_NOFULLWIDTHCHARBREAK
      

  5.   

    回复人:jasonshark(最后一个暑假了...) ( 五级(中级)) 信誉:100  2007-07-11 22:03:40  得分:0
    combine the second one with DT_NOFULLWIDTHCHARBREAK
    ===================================================
    可叹啊,终于有明白人提醒了我,这哥们还是在上学吗?不错哦。最终结果,必须要这3个常量一起才能完美的实现效果:
    DT_WORDBREAK|DT_EDITCONTROL|DT_NOFULLWIDTHCHARBREAK就剩下另外一个问题了,这个效果任何在c#里边做到呢??
    c#调用api看起来让人不爽。
      

  6.   

    DT_EDITCONTROL | DT_WORDBREAK 这个不就可以了。上面都是乱说的, 给我加分吧!
      

  7.   

    赞!DT_WORDBREAK|DT_EDITCONTROL|DT_NOFULLWIDTHCHARBREAK  + DT_CALCRECT果然能完美实现!
      

  8.   

    不知道net 怎么办,我设置stringformat Trimming = StringTrimming.Character不起效果