Microsoft KB Archive/154515

= How To Print Text Sideways in a Picture Box Using Win32 API =

Article ID: 154515

Article Last Modified on 3/14/2005

-

APPLIES TO


 * Microsoft Visual Basic 6.0 Learning Edition
 * Microsoft Visual Basic 6.0 Professional Edition
 * Microsoft Visual Basic 6.0 Enterprise Edition
 * Microsoft Visual Basic 4.0 Standard Edition
 * Microsoft Visual Basic 4.0 Professional Edition
 * Microsoft Visual Basic 4.0 32-Bit Enterprise Edition

-



This article was previously published under Q154515



SUMMARY
By using the CreateFont and CreateFontIndirect Win32 API calls, it is possible to rotate text on a Device context such as a picture box, a form, or the Printer Object. This article provides a Win32 Code sample demonstrating how this can be done.



MORE INFORMATION
 Start a new Visual Basic Project. Form1 is created by default. Add a Command button to Form1. Place a PictureBox on Form1.  Place the following code in the General Declarations section of Form1: Option Explicit

Private Declare Function CreateFontIndirect Lib "gdi32" Alias _ "CreateFontIndirectA" (lpLogFont As LOGFONT) As Long Private Declare Function SelectObject Lib "gdi32" (ByVal hdc _    As Long, ByVal hObject As Long) As Long Private Declare Function DeleteObject Lib "gdi32" (ByVal _    hObject As Long) As Long Private Const LF_FACESIZE = 32

Private Type LOGFONT lfHeight As Long lfWidth As Long lfEscapement As Long lfOrientation As Long lfWeight As Long lfItalic As Byte lfUnderline As Byte lfStrikeOut As Byte lfCharSet As Byte lfOutPrecision As Byte lfClipPrecision As Byte lfQuality As Byte lfPitchAndFamily As Byte lfFaceName as String * LF_FACESIZE End Type

Sub Command1_Click Dim font As LOGFONT Dim prevFont As Long, hFont As Long, ret As Long Const FONTSIZE = 10 ' Desired point size of font font.lfEscapement = 1800   ' 180-degree rotation font.lfFaceName = "Arial" & Chr$(0) 'Null character at end ' Windows expects the font size to be in pixels and to    ' be negative if you are specifying the character height ' you want. font.lfHeight = (FONTSIZE * -20) / Screen.TwipsPerPixelY hFont = CreateFontIndirect(font) prevFont = SelectObject(Picture1.hdc, hFont) Picture1.CurrentX = Picture1.ScaleWidth Picture1.CurrentY = Picture1.ScaleHeight / 2 Picture1.Print "Rotated Text" ' Clean up by restoring original font. ret = SelectObject(Picture1.hdc, prevFont) ret = DeleteObject(hFont) Picture1.CurrentY = Picture1.ScaleHeight / 2 Picture1.Print "Normal Text" End Sub  Press the F5 key to run the project, and then press the Command Button. You will see two pieces of text appear, one the right way up and one inverted.

NOTE: These instructions will not work if you attempt to use Printer.hDC in Visual Basic 5.0, SP2 or SP3, instead of using Picture1.hDC.

