关于DrawTextW的问题!(50分)

  • 主题发起人 主题发起人 aizb
  • 开始时间 开始时间
A

aizb

Unregistered / Unconfirmed
GUEST, unregistred user!
为了在没有中文平台的英文版中显示中文,特地写了如下的一段程序:<br>//系统中已有936代码页文件,注册表中也已经有相关的值。<br>//系统中已经安装了中文宋体字库。<br>//系统版本是英文WIndows98第二版。<br><br>//为什么DrawTextW函数不起作用。而TextOutW函数确可以起作用。<br><br>unit Unit1;<br><br>interface<br><br>uses<br>&nbsp; Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,<br>&nbsp; Dialogs, ExtCtrls, StdCtrls;<br><br>type<br>&nbsp; TForm1 = class(TForm)<br>&nbsp; &nbsp; Button1: TButton;<br>&nbsp; &nbsp; Image1: TImage;<br>&nbsp; &nbsp; procedure Button1Click(Sender: TObject);<br>&nbsp; private<br>&nbsp; &nbsp; { Private declarations }<br>&nbsp; public<br>&nbsp; &nbsp; { Public declarations }<br>&nbsp; end;<br><br>var<br>&nbsp; Form1: TForm1;<br><br>implementation<br><br>{$R *.dfm}<br><br>procedure AiOutText(Canvas:TCanvas; x,y:integer; GB:string;R:TRect);<br>var W:PWideChar;<br>&nbsp; &nbsp; GBlength, WSize:integer;<br>begin<br>&nbsp; GBLength:=Length(GB);<br><br>&nbsp; WSize:=GBlength*2+2;<br>&nbsp; W:=AllocMem(WSize);<br>&nbsp; try<br>&nbsp; &nbsp; MultiByteToWideChar(936,0,PChar(GB),GBLength,W,WSize);<br><br>&nbsp; &nbsp; GBlength:=LStrLenW(W);<br>&nbsp; &nbsp; TextOutW(Canvas.Handle, R.Left,R.Top,W,GBlength);<br>&nbsp; &nbsp; R.Top:=R.Top+40;<br>&nbsp; &nbsp; DrawTextW(Canvas.Handle,W,GBlength,R,DT_LEFT);<br>&nbsp; &nbsp; //本来想在TextOutW输出的位置的下面40Y偏移用DrawTextW输出另一行。但是没有任何输出。<br>&nbsp; &nbsp; //也就是说这个函数根本没有起到作用。<br>&nbsp; &nbsp; //TextOutW和DrawTextW在使用上有什么大的区别吗?我需要DrawTextW的最后两个参数。<br>&nbsp; finally<br>&nbsp; &nbsp; FreeMem(W, WSize);<br>&nbsp; end;<br>end;<br><br><br>procedure TForm1.Button1Click(Sender: TObject);<br>var s:String;<br>begin<br>&nbsp; s:='&lt;a href="listroom.asp"&gt;问题分类&lt;/a&gt;';<br>&nbsp; Canvas.Font.Size:=16;<br>&nbsp; Canvas.Font.Name:='MS Song';<br>&nbsp; Canvas.Font.Charset:=GB2312_CHARSET;<br>&nbsp; AiOutText(Canvas,0,0,s,ClientRect);<br>end;<br><br>end.
 
竟然没有一个人知道?
 
恭喜你可能发现了一个操作系统的 Bug,换一个操作系统看看(当然还是英文windows)。
 
呵呵!DrawText本身在Win9X中是不支持Unicode的,<br>所以DrawTextW是画不出UniCode字符串的。<br>另想办法吧!
 
接受答案了.
 
后退
顶部