Windows 使用Uniscribe为复杂的脚本执行上下文调整(可以应用于l-to-r以及r-to-l语言)。文本框中显示的文本基于字符输入 Uniscribe 后的字形信息。尽管 Unicode 标准为字符的每个孤立形式、初始形式、中间形式和最终形式定义了代码点,但并非所有字体都必须支持它们,但它们可能具有预成形字形或使用字形组合——Uniscribe 使用来自Windows 语言包,用于根据字体的 cmap 确定要使用的字形。以下是一些相关链接:
TextRenderer .DrawText ()方法通过 Win32 DrawTextExW()函数使用 Uniscribe,使用以下 P/Invoke:
[DllImport("user32.dll", CharSet=CharSet.Unicode, SetLastError=true)]
public static extern int DrawTextExW( HandleRef hDC
,string lpszString
,int nCount
,ref RECT lpRect
,int nFormat
,[In, Out] DRAWTEXTPARAMS lpDTParams);
[StructLayout(LayoutKind.Sequential)]
public struct RECT
{
public int left;
public int top;
public int right;
public int bottom;
}
[StructLayout(LayoutKind.Sequential)]
public class DRAWTEXTPARAMS
{
public int iTabLength;
public int iLeftMargin;
public int iRightMargin;
public int uiLengthDrawn;
}