VB OpenGL 汉字显示

这两天公司有个项目要用ESRI 的ArcScene做三维,但是中文道路名要用扩展模块才能写不上去。

ESRI在方便用户和开发人员角度和微软很象,跟新技术也跟得很紧,提供了大量的示例程序,找了一个写文字的程序看了一下,它通过OpenGL写上去的。我听说过OpenGL只有C接口,没想到VB也能写OpenGL得东东。原来是有人做了一个OpenGL的类型库vbogl.tlb,本机上没有到网上一搜找到了这个网站http://home.pacific.net.hk/%7Eedx/

   原本以为万事大吉了,没想到麻烦事才刚刚开始。外国人提供的源程序当然是写西文的,没想到把它改写成能显示中文费了如此大的劲。我对OpenGL不熟悉,看了好几个例子才写TrueType文字是怎么回事。先用wglUseFontOutlines函数创建glyph也叫显示列表(Display list),相当于一个小的矢量图形,然后调用glCallLists把它画出来。每个glyph创建时都有一个编号,以后通过这个编号来引用它。该编号与文字的编码如ASCII或汉字内码没有任何必然的联系,因为西文字符集小,所以很多例子都是先生成所有可显示西文字符的glyph,然后直接用字符串来引用这些glyph。这样做给我理解上制造了不少麻烦,汉字字符集太大不可能所有汉字都生成对应的glyph。

  后来在网上找到一个VC写的能显示3D中文字符的代码片断,它是一个一个字符处理的,当初觉得很奇怪,因为西文字符串都是成批处理的,中西文或纯中文必须一个一个处理。后来终于明白了,原来是这么这么回事,给字符串中每个字符生成一个独立的glyph。VC中可以了,转到VB中来,原本以为问题不是很大,没想到折腾了一天。

VB内部对字符串表示用BSTR,编码是Unicode的。OpenGL没有Unicode版只有ANSI版,麻烦事来了。想了各种办法就是不出来汉字,后来发现是编码不对。VC中没有定义UNICODE默认是DBCS,中文环境下是GBK编码。比如“中国”Unicode是“0x4E2D56FD”,而GBK编码是“0xD6D0B9FA”。必须把VB中的Unicode转换成GBK吗才能正确显示。有两种办法一种是调用API函数WideCharToMultiByte来转,但在VB中还有一个更简单的办法就是调用全局函数StrConv(s, vbFromUnicode)返回一个GBK编码的字节数组。这样就可以了。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值