我新建了一个工程,在一个窗体里加进了一个 TTntTreeView 控件调用以下代码在繁体和英文机上没有问题procedure TForm1.TreeViewTestCustomDrawItem(Sender: TCustomTreeView;
  Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
var
  xRect: TRect;
  xText: WideString;
begin
  DefaultDraw := False;
  xRect := Node.DisplayRect(true);
  xText := '测试';  ExtTextOutW(TreeViewTest.Canvas.Handle, xRect.Left,
     xRect.Top, TreeViewTest.Canvas.TextFlags, nil,
      PWideChar(xText), Length(xText), nil);
end;可以正常显示,但调用以下代码中文部分显示 "?" 号procedure TForm1.TreeViewTestCustomDrawItem(Sender: TCustomTreeView;
  Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
var
  xRect: TRect;
  xText: WideString;
begin
  DefaultDraw := False;
  xRect := Node.DisplayRect(true);
  xText := Node.Text;   ExtTextOutW(TreeViewTest.Canvas.Handle, xRect.Left,
     xRect.Top, TreeViewTest.Canvas.TextFlags, nil,
      PWideChar(xText), Length(xText), nil);
end;由于界面需要,要重新调整文字位置的,请各位帮我解决这个问题,谢谢!!

解决方案 »

  1.   

    ExtTextOut 说明 
    经过扩展的文本描绘函数。也请参考SetTextAlign函数 
    返回值 
    Long,非零表示成功,零表示失败。会设置GetLastError 
    参数表 
    参数 类型及说明 
    hdc Long,设备场景的句柄 
    x,y Long,以逻辑坐标表示的一个点,指定了绘图起点 
    wOptions Long,下述标志常数的任意组合 
    ETO_CLIPPED 将文本剪切出指定的矩形 
    ETO_GLPYH_INDEX lpString是一个字样索引表。参考对GetCharacterPlacement函数的说明。只适用于Win95 
    ETO_OPAQUE 在正式描绘文本前,用当前的背景色填充矩形 
    lpRect Rect,指定一个矩形,用于对文本进行格式化处理。可指定长整数0,在不用矩形区域的前提下描绘文本 
    lpString String,欲描绘的字串 
    nCount Long,字串中要显示出来的字符数 
    lpDx Long,如果不是零,这个参数就代表指向一个Long值数组的指针。该数组对每一对字符的间距进行了说明(采用逻辑单位)。其中第一个条目是第一和第二个字符的间距;第二个条目是第二和第三个字符的间距;以此类推。如果为零,函数就使用字体的默认间距设置