SOS!!!我想在PictureBox中输出文字,但是需要文字是倒着的,在字体前面加"@",只有汉字睡下了,字母与数字还立着,让他们倒下怎么办啊?

blstar 2000-12-25 08:55:00
SOS!!!我想在PictureBox中输出文字,但是需要文字是倒着的,在字体前面加"@",只有汉字睡下了,字母与数字还立着,让他们倒下怎么办啊?
...全文
543 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
ColdSpring 2001-01-03
  • 打赏
  • 举报
回复

这个容易,每个字母一棒子,挨个搞定!:)
blstar 2001-01-03
  • 打赏
  • 举报
回复
这个问题,不是很简单。。。。。不过,我现在倒解决了。。。
因为是需要动态生成文字,所以不能用photoshop之类的东东。
PaintPicture中的属性用过。。不过好像只能作左右之镜像和上下之镜像,但不好作旋转镜像,且用之太慢。
找了一大把资料,自己搞定了:原理是call API创建一种逻辑字体,可以实现字体的任意角度输出。大致如下:

其中的声明和函数(放在mod中的):


Public Type RECT
left As Long
Top As Long
Right As Long
Bottom As Long
End Type

Public Declare Function FillRect Lib "user32" (ByVal hDC As Long, lpRect As RECT, ByVal hBrush As Long) As Long
Public Declare Function CreateSolidBrush Lib "gdi32" (ByVal crColor As Long) As Long
Public Declare Function TextOut Lib "gdi32" Alias "TextOutA" (ByVal hDC As Long, ByVal X As Long, ByVal Y As Long, ByVal lpString As String, ByVal nCount As Long) As Long
Public Declare Function GetDeviceCaps Lib "gdi32" (ByVal hDC As Long, ByVal nIndex As Long) As Long
Public Const LOGPIXELSX = 88 ' Logical pixels/inch in X
Public Const LOGPIXELSY = 90 ' Logical pixels/inch in Y
Public Declare Function MulDiv Lib "kernel32" (ByVal nNumber As Long, ByVal nNumerator As Long, ByVal nDenominator As Long) As Long
Public Const LF_FACESIZE = 32

Public 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(LF_FACESIZE) As Byte
End Type

Public Declare Function CreateFontIndirect Lib "gdi32" Alias "CreateFontIndirectA" (lpLogFont As LOGFONT) As Long
Public Declare Function SelectObject Lib "gdi32" (ByVal hDC As Long, ByVal hObject As Long) As Long
Public Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
Public Const FW_NORMAL = 400
Public Const FW_BOLD = 700
Public Const FF_DONTCARE = 0
Public Const DEFAULT_QUALITY = 0
Public Const DEFAULT_PITCH = 0
Public Const DEFAULT_CHARSET = 1
Public Declare Function OleTranslateColor Lib "OLEPRO32.DLL" (ByVal OLE_COLOR As Long, ByVal HPALETTE As Long, pccolorref As Long) As Long
Public Const CLR_INVALID = -1


Public Sub pOLEFontToLogFont(fntThis As StdFont, hDC As Long, tLF As LOGFONT)
Dim sFont As String
Dim iChar As Integer

' Convert an OLE StdFont to a LOGFONT structure:
With tLF
sFont = fntThis.Name
sFont = "Arial"
' There is a quic6ker way involving StrConv and CopyMemory, but
' this is simpler!:
For iChar = 1 To Len(sFont)
.lfFaceName(iChar - 1) = CByte(Asc(Mid(sFont, iChar, 1)))
Next iChar

' Based on the Win32SDK documentation:
.lfHeight = -MulDiv((fntThis.Size), (GetDeviceCaps(hDC, LOGPIXELSY)), 72)
.lfItalic = fntThis.Italic
If (fntThis.Bold) Then
.lfWeight = FW_BOLD
Else
.lfWeight = FW_NORMAL
End If
.lfUnderline = fntThis.Underline
.lfStrikeOut = fntThis.Strikethrough
End With
End Sub


调用如下:(我只将我的程序代码paste上来了,没用改动)


Dim i As Integer

Dim hFnt As Long
Dim hFntOld As Long
Dim lgFnt As LOGFONT


CObj.Font.Name = "Arial"
CObj.CurrentX = CurX
CObj.CurrentY = CObj.CurrentY + CObj.TextWidth(Txt)
pOLEFontToLogFont CObj.Font, CObj.hDC, lgFnt
lgFnt.lfEscapement = 900
hFnt = CreateFontIndirect(lgFnt)
If hFnt <> 0 Then
hFntOld = SelectObject(CObj.hDC, hFnt)
TextOut CObj.hDC, CObj.CurrentX / Screen.TwipsPerPixelX, CObj.CurrentY / Screen.TwipsPerPixelY, Txt, LenB(StrConv(Txt, vbFromUnicode))
SelectObject CObj.hDC, hFntOld
DeleteObject hFnt
CObj.Refresh
End If


------------------------

感谢各位的参与,小弟也很感激,来者有份!!
vbdabster 2001-01-03
  • 打赏
  • 举报
回复
怎么能说简单呢,用photoshop太。。。,我也不知道要怎么办才好
storyxlx 2001-01-03
  • 打赏
  • 举报
回复
PaintPicture方法只要Top和Bottom颠倒,图象就会倒过来,CSDN中有详细介绍。
Eastunfail 2001-01-03
  • 打赏
  • 举报
回复
这个问题是不是有一点简单,用photoshop之类的作图软件把字倒过来,在用loadpicture
加载不就可以了吗?
blstar 2000-12-25
  • 打赏
  • 举报
回复
就是这回事啊,有没有API可以Call啊?
要是实在不行,写在小图片,倒过来往上贴?
iProgram 2000-12-25
  • 打赏
  • 举报
回复
@+Font只对中文有效,对西方文字无效,在设置字体时下方有一个字符集选项,哪些@开头的字体有的只有中文字符集,有西方字符集选项的也不支持躺着显示,只好另谋生路了:)

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧