How to: Rotate Text
[This documentation is for preview only, and is subject to change in later releases. Blank topics are included as placeholders.]
The .NET Compact Framework provides the LogFont class for creating rotated text effects. It corresponds to the native Windows CE LOGFONT (logical font) structure that you use with the FromLogFont method to return a Font object.
The following code example draws a string at 45 degrees in the center of the form. It defines a CreateRotatedFont method that takes the rotation angle and text to be rotated as its parameters and returns a rotated font, using the LogFont class. The rotated text is drawn on the form in the OnPaint event handler.
This example sets the DPI to 96, but you should set it to the value appropriate for the target device. The value can be determined by getting the DpiY property of a Graphics object. This code example contains a formula to scale the font for devices with different DPI values.
Imports System Imports System.Drawing Imports System.Windows.Forms Imports Microsoft.WindowsCE.Forms Public Class Form1 Inherits System.Windows.Forms.Form ' Declare objects to draw the text. Private rotatedFont As System.Drawing.Font Private redBrush As SolidBrush ' Specify the text to roate, the rotation angle, ' and the base font. Private rTxt As String = "abc ABC 123" Private rAng As Integer = 45 ' Determine the vertial DPI setting for scaling the font on the ' device you use for developing the application. ' You will need this value for properly scaling the font on ' devices with a different DPI. ' In another application, get the DpiY property from a Graphics object ' on the device you use for application development: ' ' Dim g As Graphics = Me.CreateGraphics() ' Dim curDPI As Integer = g.DpiY Private Const curDPI As Integer = 96 ' Note that capabilities for rendering a font are ' dependant on the device. Private rFnt As String = "Arial" Public Sub New() MyBase.New() ' Display OK button to close application. Me.MinimizeBox = False Me.Text = "Rotated Font" ' Create rotatedFont and redBrush objects in the custructor of ' the form so that they can be resued when the form is repainted. Me.rotatedFont = CreateRotatedFont(rFnt, rAng) Me.redBrush = New SolidBrush(Color.Red) End Sub ' Method to create a rotated font using a LOGFONT structure. Private Function CreateRotatedFont(ByVal fontname As String, _ ByVal angleInDegrees As Integer) As Font Dim logf As LogFont = New Microsoft.WindowsCE.Forms.LogFont ' Create graphics object for the form, and obtain ' the current DPI value at design time. In this case, ' only the vertical resolution is petinent, so the DpiY ' property is used. Dim g As Graphics = Me.CreateGraphics ' Scale an 18-point font for current screen vertical DPI. logf.Height = Fix(-18.0F * g.DpiY / curDPI) ' Convert specified rotation angle to tenths of degrees. logf.Escapement = (angleInDegrees * 10) ' Orientation is the same as Escapement in mobile platforms. logf.Orientation = logf.Escapement logf.FaceName = fontname ' Set LogFont enumerations. logf.CharSet = LogFontCharSet.Default logf.OutPrecision = LogFontPrecision.Default logf.ClipPrecision = LogFontClipPrecision.Default logf.Quality = LogFontQuality.ClearType logf.PitchAndFamily = LogFontPitchAndFamily.Default ' Explicitly dispose any drawing objects created. g.Dispose() Return System.Drawing.Font.FromLogFont(logf) End Function Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs) If (Me.rotatedFont Is Nothing) Then Return End If ' Draw the text to the screen using the LogFont, starting at ' the specified coordinates on the screen. e.Graphics.DrawString(rTxt, Me.rotatedFont, Me.redBrush, _ 75, 125, New StringFormat( _ (StringFormatFlags.NoWrap Or StringFormatFlags.NoClip))) End Sub Protected Overrides Sub Dispose(ByVal disposing As Boolean) ' Dispose created graphic objects. Although they are ' disposed by the garbage collector when the application ' terminates, a good practice is to dispose them when they ' are no longer needed. Me.redBrush.Dispose() Me.rotatedFont.Dispose() MyBase.Dispose(disposing) End Sub Public Shared Sub Main() Application.Run(New Form1) End Sub End Class