您好,登錄后才能下訂單哦!
在開發(fā)“518抽獎軟件”的時候,需要用到GDI+的寫文字功能。 GDI+在對齊方面比原來的GDI復(fù)雜些,主要是 StringFormat 的參數(shù)設(shè)置和行高的測定問題,詳情參考下面的源碼。
//單行文本,rc內(nèi)對齊,align是水平對齊,valign是垂直對齊
//
void Tapp::paint_str(HDC hDc, const WCHAR* str, LOGFONT& lf, COLORREF color, RECT& rc, WORD align, WORD valign)
{
if (!str) return;
if (rc.right - rc.left <= 1 || rc.bottom - rc.top <= 1) return;
StringFormat fmt;
fmt.SetFormatFlags(StringFormatFlagsNoWrap | StringFormatFlagsNoClip | StringFormatFlagsMeasureTrailingSpaces);
if (align == ALIGN_NEAR) fmt.SetAlignment(StringAlignmentNear);
else if (align == ALIGN_CENTER) fmt.SetAlignment(StringAlignmentCenter);
else fmt.SetAlignment(StringAlignmentFar);
fmt.SetLineAlignment(StringAlignmentNear);
RectF rcF;
rcF.X = rc.left;
rcF.Y = rc.top;
rcF.Width = rc.right - rc.left;
rcF.Height = rc.bottom - rc.top;
FontFamily ff(lf.lfFaceName);
Font gfont(hDc, &lf);
SolidBrush bru(Color(GetRValue(color), GetGValue(color), GetBValue(color)));
Graphics g(hDc);
int style = FontStyleRegular;
if (lf.lfItalic) style = FontStyleItalic;
if (lf.lfWeight == FW_BOLD) style = FontStyleBold;
if (lf.lfItalic && lf.lfWeight == FW_BOLD) style = FontStyleBoldItalic;
double r = (double)(ff.GetCellAscent(style) + ff.GetCellDescent(style)) / (double)ff.GetLineSpacing(style);
if (align == ALIGN_NEAR) rcF.Width += 500.0;
else if (align == ALIGN_FAR) { rcF.X -= 500.0; rcF.Width += 500.0; }
else { rcF.X -= 500.0; rcF.Width += 1000.0; }
if (valign == ALIGN_NEAR) rcF.Height += 500.0;
else if (valign == ALIGN_CENTER) {
rcF.Y -= 500.0;
rcF.Height += 1000.0;
rcF.Y += ((rcF.Height - gfont.GetHeight(&g)*r) / 2.0);
}
else {
rcF.Y -= 500.0;
rcF.Height += 500.0;
rcF.Y += (rcF.Height - gfont.GetHeight(&g)*r);
}
SetTextRenderingHint(TextRenderingHintAntiAlias);
g.DrawString(str, -1, &gfont, rcF, &fmt, &bru);
}
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。