读书人

怎样在图片框中的特定位置print竖直文

发布时间: 2012-04-09 13:41:25 作者: rapoo

怎样在图片框中的特定位置print竖直文本
如题

[解决办法]
使用GDI+来绘制是最佳的选择

[解决办法]

VB code
'1、本例使用Gdiplus.tlb来实现GDI+编程,使用前请先现在一个Gdiplus.tlb'2、使用Gdiplus.tlb,将其放到system32中,然后添加对其的引用'3、手动设置Form的AutoRedraw=True,ScaleMode=PixelsOption ExplicitDim lngGraphics As LongDim gpP As GpStatusDim lngPen1 As LongDim lngToken As LongDim lngSolidBrush As LongDim GpInput As GdiplusStartupInputPrivate lngFontFamily As Long               '字体类型Private lngStringFormat As Long             '字符串格式Private Sub Command1_Click()    Dim intP As Integer    Dim bolP As Boolean    gpP = GdipCreateFromHDC(Me.hDC, lngGraphics)    gpP = GdipCreatePen1(&H80FF0000, 2, UnitPixel, lngPen1)    bolP = DrawNormalText("新宋体", &H808000FF, StringAlignmentNear, _                                    30, FontStyle.FontStyleBold, UnitPixel, _                                    TextRenderingHintAntiAliasGridFit, 2, 100, 450, 128, _                                    "中华人民共和国中央人民政府")    bolP = DrawSpecialText("Verdana", &HFFFFFFFF, StringAlignmentNear, _                                            FontStyle.FontStyleBold, &HFF00FF00, 1.2, _                                            UnitPixel, FillModeAlternate, 40, 460, 100, 240, 128, "ABCD123", 0)    Me.RefreshEnd SubPrivate Sub Form_Load()    Dim bolP As Boolean        With Me        .Caption = "GDIPlus范例"        .Width = 960 * 15        .Height = 720 * 15        .Left = (Screen.Width - .Width) * 0.5        .Top = (Screen.Height - .Height) * 0.5    End With        GpInput.GdiplusVersion = 1    If lngToken = 0 Then bolP = (GdiplusStartup(lngToken, GpInput) = Ok)        End Sub'************************************************************************************************************************'函数功能:按照一定的格式书写文字,正常排列(不包括:旋转、描边等)'参数说明:strFontName:字体名称'        :lngFontColor:文字颜色'        :stringAlignMode:对齐方式'        :sngFontSize:字体大小'        :lngFontStyle:字体样式(粗体、斜体..)'        :DrawUnit:绘图单元'        :TextRenderMode:文本渲染模式'        :lngLeft:绘制文本区域    Left'        :lngTop:绘制文本区域     Top'        :lngWidth:绘制文本区域   Width'        :lngHeight:绘制文本区域  Height'        :strText:要书写的文本'返回说明:成功:True   失败:False'************************************************************************************************************************Private Function DrawNormalText(ByVal strFontName As String, ByVal lngFontColor As Long, _                         ByVal StringAlignMode As StringAlignment, _                         ByVal sngFontSize As Single, ByVal lngFontStyle As Long, _                         ByVal DrawUnit As GpUnit, ByVal TextRenderMode As TextRenderingHint, _                         ByVal lngLeft As Long, ByVal lngTop As Long, _                         ByVal lngWidth As Long, ByVal lngHeight As Long, ByVal strText As String) As Boolean    Dim gpP As GpStatus    Dim lngCurFont As Long    Dim rclayout As RECTFOn Error GoTo errFun    gpP = GdipCreateFontFamilyFromName(strFontName, 0, lngFontFamily)    gpP = GdipCreateStringFormat(0, 0, lngStringFormat)    gpP = GdipCreateSolidFill(lngFontColor, lngSolidBrush)    gpP = GdipSetStringFormatAlign(lngStringFormat, StringAlignMode)    gpP = GdipCreateFont(lngFontFamily, sngFontSize, lngFontStyle, DrawUnit, lngCurFont)    gpP = GdipSetTextRenderingHint(lngGraphics, TextRenderMode)    With rclayout        .Left = lngLeft        .Top = lngTop        .Width = lngWidth        .Height = lngHeight    End With    gpP = GdipDrawString(lngGraphics, strText, -1, lngCurFont, rclayout, lngStringFormat, lngSolidBrush)    gpP = GdipDeleteFontFamily(lngFontFamily)    gpP = GdipDeleteStringFormat(lngStringFormat)    gpP = GdipDeleteFont(lngCurFont)    gpP = GdipDeleteBrush(lngSolidBrush)    lngSolidBrush = 0    lngFontFamily = 0        If IsNull(gpP) Then        DrawNormalText = False    Else        DrawNormalText = True    End If        Exit FunctionerrFun:    DrawNormalText = FalseEnd Function'************************************************************************************************************************'函数功能:按照一定的格式书写文字,特殊格式包括:旋转、描边等'参数说明:strFontName:字体名称'        :lngBrushColor:文字颜色'        :stringAlignMode:对齐方式'        :lngFontStyle:字体样式(粗体、斜体..)'        :lngLineColor:边框颜色'        :sngLineWidth:边框宽度'        :DrawLineUnit:边框绘制单位'        :sngFontSize:字体大小'        :lngLeft:绘制文本区域    Left'        :lngTop:绘制文本区域     Top'        :lngWidth:绘制文本区域   Width'        :lngHeight:绘制文本区域  Height'        :strText:要书写的文本'        :dblAngle:字符串和X轴正方向的夹角(0~2*Pi)'返回说明:成功:True   失败:False'************************************************************************************************************************Private Function DrawSpecialText(ByVal strFontName As String, ByVal lngBrushColor As Long, _                         ByVal StringAlignMode As StringAlignment, ByVal lngFontStyle As Long, _                         ByVal lngLineColor As Long, ByVal sngLineWidth As Single, _                         ByVal DrawLineUnit As GpUnit, ByVal BrushMode As FillMode, _                         ByVal sngFontSize As Single, ByVal lngLeft As Long, _                         ByVal lngTop As Long, ByVal lngWidth As Long, _                         ByVal lngHeight As Long, ByVal strText As String, _                         ByVal dblAngle As Double) As Boolean    Dim gpP As GpStatus    Dim lngStringPath As Long    Dim rclayout As RECTLOn Error GoTo errFun    gpP = GdipCreateFontFamilyFromName(strFontName, 0, lngFontFamily)       '创建字体类型    gpP = GdipCreateStringFormat(0, 0, lngStringFormat)                     '创建字符串格式    gpP = GdipSetStringFormatAlign(lngStringFormat, StringAlignMode)        '设置字符串格式    gpP = GdipCreateSolidFill(lngBrushColor, lngSolidBrush)                  '创建一个实心刷子    gpP = GdipCreatePen1(lngLineColor, sngLineWidth, DrawLineUnit, lngPen1)        With rclayout        .Left = lngLeft        .Top = lngTop        .Width = lngWidth        .Height = lngHeight    End With    gpP = GdipCreatePath(BrushMode, lngStringPath)    gpP = GdipAddPathStringI(lngStringPath, strText, -1, lngFontFamily, _                             lngFontStyle, sngFontSize, rclayout, lngStringFormat)    gpP = GdipFillPath(lngGraphics, lngSolidBrush, lngStringPath)    gpP = GdipDrawPath(lngGraphics, lngPen1, lngStringPath)    If IsNull(gpP) Then        DrawSpecialText = False    Else        DrawSpecialText = True    End If        gpP = GdipDeleteFontFamily(lngFontFamily)    gpP = GdipDeleteStringFormat(lngStringFormat)    gpP = GdipDeletePath(lngStringPath)    gpP = GdipDeleteBrush(lngSolidBrush)    gpP = GdipDeletePen(lngPen1)    lngSolidBrush = 0    lngFontFamily = 0    lngPen1 = 0                Exit FunctionerrFun:    DrawSpecialText = FalseEnd Function 

读书人网 >VB

热点推荐