以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- drawtext结尾乱码问题 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=124884) |
-- 作者:douglas738888 -- 发布时间:2018/9/15 14:35:00 -- drawtext结尾乱码问题 麻烦老师,帮忙看看,我对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 \'写标题 Dim hFont As Integer = CreateFont(14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "宋体") SelectObject(hMem, hFont) ...........省略代码 Public myf orm As Windows.F orms.F orm |
-- 作者:有点蓝 -- 发布时间:2018/9/15 15:01:00 -- 这个我也不懂,请自行网上搜索资料 |
-- 作者:douglas738888 -- 发布时间: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,这样就能解决字符串结尾出现乱码的问题
|