SO WIRD'S GEMACHT: Text drehen

Dieser Dokumentation für die Vorschau nur ist und in späteren Versionen geändert. Leere Themen wurden als Platzhalter eingefügt.]

.NET Compact Framework stellt die LogFont-Klasse zum Erstellen von gedrehten Texteffekten. Es entspricht die systemeigene Windows CE LOGFONT (logische Schriftart) Struktur, die Sie mit der FromLogFont -Methode, verwenden um ein Font-Objekt zurückzugeben.

Beispiel

Im folgenden Codebeispiel zeichnet eine Zeichenfolge auf 45 Grad in der Mitte des Formulars. Es definiert eine CreateRotatedFont -Methode, die akzeptiert den Drehwinkel und den Text gedreht werden, als Parameter und eine gedrehte Schriftart mithilfe der LogFont-Klasse zurückgibt. Gedrehte Text wird auf das Formular in der OnPaint Ereignishandler gezeichnet.

In diesem Beispiel wird den dpi-Wert mit 96, jedoch sollten Sie es festlegen auf den Wert für das Zielgerät geeignete. Der Wert kann durch Abrufen der DpiY -Eigenschaft eines Objekts Graphics ermittelt werden. Dieses Codebeispiel enthält eine Formel zum Skalieren der Schriftart für Geräte mit verschiedenen DPI-Werten.

                        Imports System
Imports System.Drawing
Imports System.Windows.Forms
Imports Microsoft.WindowsCE.Forms

PublicClass 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 AsString = "abc ABC 123"Private rAng AsInteger = 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.DpiYPrivateConst curDPI AsInteger = 96

    ' Note that capabilities for rendering a font are     ' dependant on the device.Private rFnt AsString = "Arial"PublicSubNew()
        MyBase.New()

        ' Display OK button to close application.Me.MinimizeBox = FalseMe.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)
    EndSub
    ' Method to create a rotated font using a LOGFONT structure.PrivateFunction CreateRotatedFont(ByVal fontname AsString, _
        ByVal angleInDegrees AsInteger) 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)
    EndFunctionProtectedOverridesSub OnPaint(ByVal e As PaintEventArgs)
        If (Me.rotatedFont IsNothing) ThenReturnEndIf        ' 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)))
    EndSubProtectedOverridesSub Dispose(ByVal disposing AsBoolean)

        ' 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)
    EndSubPublicSharedSub Main()
        Application.Run(New Form1)
    EndSubEndClass
                        using System;
using System.Drawing;
using System.Windows.Forms;
using Microsoft.WindowsCE.Forms;

namespace LogFontDemo
{
    publicclass Form1 : System.Windows.Forms.Form
    {
        // Declare objects to draw the text.
        Font rotatedFont;
        SolidBrush redBrush;

        // Specify the text to roate, the rotation angle,// and the base font.privatestring rTxt = "abc ABC 123";
        privateint rAng = 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:// //   Graphics g = this.CreateGraphics();//   int curDPI = g.DpiY;privateconstint curDPI = 96;

        // Note that capabilities for rendering a font are// dependant on the device.privatestring rFnt = "Arial";

        public Form1()
        {
            // Display OK button to close application.this.MinimizeBox = false;
            this.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.this.rotatedFont = CreateRotatedFont(rFnt, rAng);
            this.redBrush    = new SolidBrush(Color.Red);
        }

        // Method to create a rotated font using a LOGFONT structure.
        Font CreateRotatedFont(string fontname, int angleInDegrees)
        {
            LogFont logf = 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. 

            Graphics g = this.CreateGraphics();
            // Scale an 18-point font for current screen vertical DPI.
            logf.Height = (int)(-18f * 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 Font.FromLogFont(logf);
        }

        protectedoverridevoid OnPaint(PaintEventArgs e)
        {
            if(this.rotatedFont == null)
                return;

            // Draw the text to the screen using the LogFont, starting at// the specified coordinates on the screen.
            e.Graphics.DrawString(rTxt,
                this.rotatedFont,
                this.redBrush,
                75,
                125,
                new StringFormat(StringFormatFlags.NoWrap |
                     StringFormatFlags.NoClip));
        }

        protectedoverridevoid Dispose(bool disposing)
        {

            // 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.this.redBrush.Dispose();
            this.rotatedFont.Dispose();
            base.Dispose(disposing);
        }

        staticvoid Main()
        {
            Application.Run(new Form1());
        }
    }
}

Kompilieren des Codes

In diesem Beispiel sind Verweise auf die folgenden Namespaces erforderlich:

Robuste Programmierung

Dieses Beispiel erstellt Objekte für die Schriftart, die Font und SolidBrush -Objekte im Konstruktor des Formulars rendern, so dass Sie von der OnPaint-Methode verwendet, wenn das Formular aktualisiert. Dann verwirft er Sie in einer Überschreibung der Dispose-Methode des Formulars.

Siehe auch

Referenz

LogFont