2013-08-23 31 views
0

我想在Windows窗体应用程序,Visual Studio 2010(C++)中旋转一段文字或数字90°。是否有捷径可寻?如何在Windows Forms/C++中旋转文本或数字90°?

+0

* [C#标签的垂直的可能的复制在Windows窗体](http://stackoverflow.com/questions/1371943/c-sharp-vertical-label-in-a-windows-forms)*。 –

回答

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

+0

这不是C++ –

+0

OOPS,我只注意到了Winforms标签.. 我这个应该有帮助.. http://www.codeproject.com/Articles/740/Simple-text-rotation – Pankaj

+0

嗨,非常感谢你为了您的答案,我在哪里放置代码?我在这个事件private:System :: Void label37_Paint(System :: Object^sender,System :: Windows :: Forms :: PaintEventArgs^e){}中试过它,它没有工作。 Windows窗体不明白e。非常感谢你! – Weiwei

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);