Foxtable(狐表)用户栏目专家坐堂 → drawtext结尾乱码问题


  共有2467人关注过本帖树形打印复制链接

主题:drawtext结尾乱码问题

帅哥哟,离线,有人找我吗?
douglas738888
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1172 积分:8772 威望:0 精华:0 注册:2012/4/18 16:28:00
drawtext结尾乱码问题  发帖心情 Post By:2018/9/15 14:35:00 [只看该作者]

 

麻烦老师,帮忙看看,我对API和GDI不太熟悉,这个代码是自定义窗体的,现在的问题是,标题栏只输入中文没有问题,如果标题栏中文英文和数字混排出现,标题栏的字符串结尾会出现乱码


例如:贵阳(M-21)地块项目    或者 昆明学府路(东段)2011地块项目,       在字符串结尾处就出现各种乱码,除非字符串数量超出RECT区域,经过H40000处理出现省略...才正常。


因为全部代码在这里无法全部上传(点发表,上传报错,无法上传),只能截取存在错误的代码请老师帮忙看看          其他未上传的代码应该没有问题,自定义的窗体都能正常生成和使用


Public Class Class2

........省略代码


Public Declare Function DrawText Lib "user32" Alias "DrawTextA" (ByVal hdc As Integer, ByVal lpStr As String, ByVal nCount As Integer, ByRef lpRect As RECT, ByVal wFormat As Integer) As Integer
   
    Public Declare Function CreateFont Lib "gdi32" Alias "CreateFontA" (ByVal H As Integer, ByVal W As Integer, ByVal E As Integer, ByVal O As Integer, ByVal W As Integer, ByVal I As Integer, ByVal u As Integer, ByVal S As Integer, ByVal C As Integer, ByVal OP As Integer, ByVal CP As Integer, ByVal Q As Integer, ByVal PAF As Integer, ByVal F As String) As Integer

'写标题
        Dim sTitle As String = myform.Text
        SetBkMode(hMem, &H1) 

        Dim hFont As Integer = CreateFont(14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "宋体") 

        SelectObject(hMem, hFont)
        SetTextColor(hMem, &HF8F8FF) 'HFFFFFF
        Dim rcWindow1 As New RECT
        rcWindow1.Left = 35 
        rcWindow1.Top = 9 
        rcWindow1.Right = 900      'rcWindow.Right-200  '-100
        rcWindow1.Bottom = 29
        DrawText(hMem,sTitle,sTitle.Length*2,rcWindow1,&H0 Or &H4 Or &H20 Or &H40000)    'H20单行定义  H40000截短省略
        DeleteObject(hFont)


...........省略代码

Public myf orm As Windows.F orms.F orm
End Class



 回到顶部
帅哥,在线噢!
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106572 积分:542031 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2018/9/15 15:01:00 [只看该作者]

这个我也不懂,请自行网上搜索资料

 回到顶部
帅哥哟,离线,有人找我吗?
douglas738888
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1172 积分:8772 威望:0 精华:0 注册:2012/4/18 16:28:00
  发帖心情 Post By:2018/9/15 16:25:00 [只看该作者]

已经搞定,如果有朋友引用专家坐堂里面一个自定义窗口的例子(VB修改的),在全局代码里写代码的时候,请注意修改如下部分,避免标题栏不能中文英文数字混排出现乱码的情况,花了两天时间才找到问题,累人了!!!!所以避免其他朋友

走弯路,特做如下说明共享:

 

原来的代码:DrawText(hMem,sTitle,sTitle.Length*2,rcWindow1,&H0 Or &H4 Or &H20 Or &H40000)  这里如果设置了RECT矩形内的2倍宽度会出现乱码,不设宽度字符串无法全部显示且结尾出现乱码。

修改后代码:DrawText(hMem,sTitle,-1,rcWindow1,&H0 Or &H4 Or &H20 Or &H40000)

 

根据VB声明:Public Declare Function DrawText Lib "user32" Alias "DrawTextA" (ByVal hdc As Integer, ByVal lpStr As String, ByVal nCount As Integer, ByRef lpRect As RECT, ByVal wFormat As Integer) As Integer

 

这里的nCount Integer,欲描绘的字符数量。如果要描绘整个字串(直到空中止符),则可将这个参数设为-1,这样就能解决字符串结尾出现乱码的问题

 

  


 回到顶部