|

楼主 |
发表于 2012-8-26 13:45:33
|
显示全部楼层
sunfrank 发表于 2012-8-26 13:30 
用过两种方法----1你说的2在Hook里SelectObject改。
1方法乱码2方法有时乱码,有时正常(When I select ...
我这办法你试试能改不 就是貌似 GetTextWidth 出错了
我再看看
hTextFont = CreateFontHandle(Me.Font)
SendMessage TextHwnd, WM_SETFONT, hTextFont, 1- 'Create Font
- Public Declare Function CreateFontIndirect Lib "gdi32" Alias "CreateFontIndirectA" (lpLogFont As LOGFONT) 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(1 To LF_FACESIZE) As Byte
- End Type
- Public Const WM_SETFONT = &H30
- Public Const LOGPIXELSY = 90 ' Logical pixels/inch in Y
- Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
- Public Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
- Public Declare Function lstrcpy Lib "kernel32" Alias "lstrcpyA" (ByVal lpString1 As String, ByVal lpString2 As String) As Long
- Public Declare Function GetDeviceCaps Lib "gdi32" (ByVal hdc As Long, ByVal nIndex As Long) As Long
- Public Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Long, ByVal hdc As Long) As Long
- Private Function MulDiv(ByVal a As Long, ByVal b As Long, ByVal c As Long) As Long
- MulDiv = a * b / c
- End Function
- Public Function CreateFontHandle(sFont As StdFont) As Long
- Dim lf As LOGFONT
- Dim hFont As Long, hOldFont As Long
- Dim hdc As Long
- hdc = GetDC(0)
- lf.lfHeight = -MulDiv(sFont.Size, GetDeviceCaps(hdc, LOGPIXELSY), 72)
- If sFont.Bold Then
- lf.lfWeight = 700
- Else
- lf.lfWeight = 400
- End If
- lf.lfCharSet = sFont.Charset '使用GB_2312字符集
- lstrcpy lf.lfFaceName, sFont.Name
- lf.lfItalic = sFont.Italic
- lf.lfStrikeOut = sFont.Strikethrough
- lf.lfUnderline = sFont.Underline
- CreateFontHandle = CreateFontIndirect(lf)
- ReleaseDC 0, hdc
- End Function
复制代码 |
|