調(diào)試一個(gè)bug時(shí)發(fā)現(xiàn)一直以來對(duì)DrawText的 DT_WORDBREAK 參數(shù)理解有誤。
MSDN的原文如下:
| DT_WORDBREAK | Breaks words. Lines are automatically broken between words if a word extends past the edge of the rectangle specified by the lprc parameter. A carriage return-line feed sequence also breaks the line. |
這里說明如果有一個(gè)word超過了rectangle的邊界,會(huì)在這個(gè)詞和下一個(gè)詞中間斷為兩行。
GDI認(rèn)為 連續(xù)的英文字符為一個(gè)word,每一個(gè)數(shù)字或每一個(gè)漢字為一個(gè)word。假設(shè)要在寬為100的rect中使用 DT_WORDBREAK 繪制“dddddddddddddddddddddddddddddddddddddddd”會(huì)發(fā)現(xiàn)字符沒有換行,同時(shí)最后有的字符沒有完全顯示。這個(gè)是符合msdn的描述的。同樣的,如果繪制的是"dddddddddddddddddddddddddddddddddddddddddddddddddd aa"會(huì)發(fā)現(xiàn)實(shí)際繪制的是兩行,第一行是沒有完全顯示的“ddd”第二行就是“aa”,這是因?yàn)楦鶕?jù)斷字的規(guī)則,第一個(gè)word“ddddddd”超過了rect的邊界,會(huì)在這個(gè)word和下一個(gè)word("aa")間換行。
如果想要不根據(jù)word換行,需要同時(shí)指定另一個(gè)標(biāo)志DT_EDITCONTROL。