用vb6 GdipDrawString绘制汉字“报表中心” 四个字的时候出现乱码,请高手帮助解答。代码如下:

PrivateDeclareFunctionGdipDrawStringLib"gdiplus"(ByValgraphicsAsLong,ByValstrAsString... Private Declare Function GdipDrawString Lib "gdiplus" (ByVal graphics As Long, ByVal str As String, ByVal length As Long, ByVal thefont As Long, layoutRect As RECTF, ByVal StringFormat As Long, ByVal brush As Long) As GpStatus

Private Sub Comd1_Click()
Dim mLngGraphics As Long
Dim mLngFont As Long
Dim mLngFontFamily As Long
Dim mLngBrush As Long
Dim rcLayout As RECTF
Dim strFormat As Long
Dim tokentext As Long
Dim GpInput As GdiplusStartupInput
GpInput.GdiplusVersion = 1
If GdiplusStartup(tokentext, GpInput) <> Ok Then
MsgBox "Error loading GDI+!", vbCritical
Unload Me
End If
GdipCreateFromHDC Me.hdc, mLngGraphics
Call GdipCreateFontFamilyFromName(StrConv("宋体", vbUnicode), 0, mLngFontFamily)
Call GdipCreateFont(mLngFontFamily, 36, FontStyleBold, UnitPoint, mLngFont)
Call GdipCreateSolidFill(GetRGB_VB2GDIP(vbRed, 255), mLngBrush)
''出现乱码
GdipDrawString mLngGraphics, StrConv("报表中心", vbUnicode), -1, mLngFont, rcLayout, strFormat, mLngBrush
GdipDeleteBrush mLngBrush
GdipDeleteGraphics mLngGraphics
Call GdiplusShutdown(tokentext)
End Sub
展开
 我来答
sailingzyf
2012-05-31 · TA获得超过1330个赞
知道小有建树答主
回答量:860
采纳率:0%
帮助的人:1084万
展开全部
更改函数的声明。VB中的StrConv有毛病,来回转换一次字符串就变形了。
虽然你可能知道些,不过我还是啰嗦点儿吧。
VB中的string变量本身就是unicode形式存储的,但是向外部传递数据时(api、文件)VB会自动将string转换成ANSI形式以后再传递。也就是说 "报表中心" 这个字符串就是unicode形式,你传递给api的时候VB要自行转换一次,所以代码里要用 StrConv("报表中心", vbUnicode)转一次,VB再转回ANSI一次,实际传递出去的是unicode形式的 "报表中心"。但是这是理论上的,实际情况是用StrConv将某个字符串在ANSI和UNICODE之间各转一次后这个字符串就变形了,在立即窗口输入 ? StrConv(StrConv("报表中心", vbUnicode), vbFromUnicode) 看看结果就明白。ps:只有一部分字会变形,貌似没啥规律。
解决:将那个函数的声明中ByVal str As String改成ByVal str As Long,传递的时候用Strptr("报表中心")直接传递。
GdipDrawString mLngGraphics, StrPtr("报表中心"), …… ……
----------------------------------------------------
修改下,加几个字。
实际上这个不能算是strconv的毛病。本身StrConv("报表中心", vbUnicode)就是将一个unicode字串再转成unicode,这个用法本身就是错的,只是VB的自作多情,逼不得已而为之的。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式