如何在Windows窗体/ C ++中旋转文本或数字90°?

时间:2013-08-23 05:41:46

标签: c++ winforms

我想在Windows窗体应用程序Visual Studio 2010(C ++)中旋转文本块或数字90°。有一个简单的方法吗?

2 个答案:

答案 0 :(得分:1)

您必须创建LOGFONT并使用 lfEscapement lfOrientation 的值,如下所示:

SetGraphicsMode(hdc, GM_ADVANCED);

LOGFONT font          = {0};

font.lfHeight         = 0;
font.lfWidth          = 0;
font.lfEscapement     = 900; // here
font.lfOrientation    = 900; // and here
font.lfWeight         = 0;
font.lfItalic         = false;
font.lfUnderline      = false;
font.lfStrikeOut      = false;
font.lfCharSet        = DEFAULT_CHARSET;
font.lfOutPrecision   = OUT_DEFAULT_PRECIS;
font.lfClipPrecision  = CLIP_DEFAULT_PRECIS;
font.lfQuality        = CLEARTYPE_QUALITY;
font.lfPitchAndFamily = DEFAULT_PITCH | FF_DONTCARE;

auto newfont = CreateFontIndirect(&font);
auto oldfont = SelectObject(hdc, newfont);

/* do actual drawing here */

SelectObject(hdc, oldfont);

SetGraphicsMode(hdc, GM_COMPATIBLE);

DeleteObject(newfont);

答案 1 :(得分:0)

String theString = "90 Degree Rotated Text";
SizeF sz = e.Graphics.VisibleClipBounds.Size;
//Offset the coordinate system so that point (0, 0) is at the center of the desired area.
e.Graphics.TranslateTransform(sz.Width / 2, sz.Height / 2);

//Rotate the Graphics object.
e.Graphics.RotateTransform(90);
sz = e.Graphics.MeasureString(theString, this.Font);

//Offset the Drawstring method so that the center of the string matches the center.
e.Graphics.DrawString(theString, this.Font,
Brushes.Black, -(sz.Width/2), -(sz.Height/2));

//Reset the graphics object Transformations.
e.Graphics.ResetTransform();

here

复制