使用DrawTextEx繪製多行文字

2021-06-02 13:40:18 字數 1366 閱讀 3160

使用gidplus進行文字繪製時,大家經常需要把多行文字繪製在乙個矩形框中,通常採用的繪製介面是drawtext和drawtextex。這個兩個函式確實可以實現矩形框中的多行繪製,但是,它們都沒有辦法在一次繪製中定製文字行距。

為了實現文字多行繪製的同時,可以定製行距,可以採用drawtextex方法一行行的繪製文字,然後,調整行距。其中,drawtextparams結構中的uilengthdrawn屬性代表在一次繪製中,繪製了多少個字元,然後,我們就可以移動一行,繪製其餘的字元,相對於gettextextent,非常方便了。

**如下:

void drawmultiline(cdc *pdc, const cstring &cstext, crect rctext, int ilinespace)

int ilaststartpos = 0;

int itextlen = static_cast(cstext.getlength());

int ilinecount = rctext.height() / ilinespace;

crect rcsubtext(rctext);

// 繪製每一行文字

for (int iindexline = 1; iindexline <= ilinecount; ++iindexline)

rcsubtext.top = rctext.top + ilinespace*(iindexline-1);

rcsubtext.bottom = rcsubtext.top + ilinespace;

cstring cssubtext = cstext.mid(ilaststartpos);

if (iindexline != ilinecount)

// 使用drawparams獲取一行繪製的字元數

drawtextparams drawparams;

zeromemory(&drawparams, sizeof(drawtextparams));

drawparams.cbsize = sizeof(drawtextparams);

pdc->drawtextex(cssubtext.getbuffer(), static_cast(cssubtext.getlength()), rcsubtext,

dt_left | dt_editcontrol | dt_wordbreak | dt_externalleading | dt_noprefix, &drawparams);

cssubtext.releasebuffer();

if (drawparams.uilengthdrawn > 0)

if (iindexline == 1)

}else

}}

使用pygame繪製文字

一 使用文字需要匯入乙個方法 freetype 具體方法 pygame.freetype.font c windows fonts 方正粗黑宋簡體.ttf 24 前者表示字型型別,後者表示字型大小 字型型別在電腦的c盤windows fonts檔案下 import pygame,sys import...

使用python graphviz繪製神經網路結構

graphviz中結點的位置是自動生成的,新增邊會影響節點的位置。如果要固定節點位置,在新增邊時需要設定constraint false def link edges d,starts,ends for i idx,i in enumerate starts for j idx,j in enume...

使用matlab繪製春聯

受到了 天元浪子 老師的啟發 寫了乙個類似的繪製春聯的程式 已給老師投票,希望老師不要打我 天元老師的博文 用python寫春聯 抒寫最真誠的祝福和最美好的祈願 matlab繪製春聯 效果 使用方法 完整 function springscrolls stringname,type,fontsize...