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