啥也不羅嗦,上**:
gdiplus::solidbrush brush(gdiplus::color(124,25,28));
gdiplus::rectf bound;
size sz;
hdc hdc = gs.gethdc();
settextcharacterextra( hdc, 0 );
settextjustification( hdc, 0, 1 );
gs.releasehdc( hdc );
gs.setsmoothingmode( smoothingmodeantialias );
gs.settextrenderinghint( textrenderinghintantialiasgridfit );
int emsize = 20;
gdiplus::stringformat *strfmt = gdiplus::stringformat::generictypographic()->clone();
fontfamily fontfamily(l"微軟雅黑");
//行間距計算
real linespace = fontfamily.getlinespacing(fontstyleregular);
real ascent = fontfamily.getcellascent(fontstyleregular);
real descent = fontfamily.getcelldescent(fontstyleregular);
real emheight = fontfamily.getemheight(fontstyleregular);
font font(&fontfamily, emsize, fontstyleregular, unitpixel);
real ftheight = font.getheight(&gs);
real ftsize = font.getsize();
int16 ascentp = ftsize * ascent / emheight;
int16 descentp = ftsize * descent / emheight;
int16 linespacep = ftsize * linespace / emheight;
int16 gapline = linespacep - ascentp - descentp;
//文字外包計算
gs.measurestring( text.c_str(), text.length(), &font, org, strfmt, &bound );
//繪製外包矩形
color clr(255, 0, 0);
pen pen( clr, 1 );
gs.drawrectangle( &pen, bound );
gs.drawstring( text.c_str(), text.length(), &font, org, strfmt, &brush );
return 0;
總結一下:不能怪罪measurestirng測算的不准,如果繪製 g 字元時,發現外包框與 g 字元下部僅僅貼著。 還有其他字元如果上部有很大的公升高,也會與外包框僅僅貼著吧。
所以,measurestring,計算的是所有字元都被包含時的外包框大小,而不是當前繪製的字元。測算的機理不同罷了。
當然,這是我的猜測,沒有任何官方文件支援。
另外,font::getheight() - font::getsize()基本可以認定為是字元間垂直距離(如果,如果沒有公升高、沉降字元存在,都是漢字方塊字情況下)
7 利用GDI 繪製文字
s 要繪製的字串。它定義字串的文字格式。它確定所繪製文字的顏色和紋理。結構,它指定所繪製文字的左上角。drawstring string s,font font,brush brush,pointf point drawstring string s,font font,brush brush,fl...
九 利用GDI 繪製文字
繪製文字在gdi 是非常廣泛的應用。就像常見的驗證碼。在gdi 中使用drawstring drawstring string,font,brush,pointf drawstring string,font,brush,rectanglef drawstring string,font,brush...
GDI繪製網格
網格寬300,高600 bitmap image new bitmap 300,600 建立繪圖物件graphics graphics graphics graphics.fromimage image 清除畫布,背景顏色為紅色 graphics.clear color.red 通過迴圈畫出橫線 f...