0

尝试在 Eclipse 3.7 中将字体大小设置为 8 以下时,我发现了一行

.metadata\.plugins\org.eclipse.core.runtime\.settings\org.eclipse.ui.workbench.prefs


这是行:

org.eclipse.jface.textfont=1|Envy Code R|7.75|0|WINDOWS|1|-11|0|0|0|400|0|0|0|0|3|2|1|49|Envy Code R;

有人知道各个部分(由 a 分隔|)是什么意思吗?

4

2 回答 2

1

该值是 的toString()方法返回的字符串FontData。此值是特定于平台的,您必须检查FontData平台的源代码以确定它的确切含义。

该类org.eclipse.jface.preference.PreferenceConverter提供了各种方法来转换FontData到这个字符串/从这个字符串转换。

于 2017-12-20T08:33:11.600 回答
1

感谢 Greg 输入,这就是字符串的形成方式。第一部分似乎与平台无关。

1      |Envy Code R|7.75  |0
version|name       |height|style

其余的取决于平台。

WINDOWS |1       |-11     |0      |0           |0            |400     |0       |0          |0          |0        |3             |2              |1        |49             
platform|version2|lfHeight|lfWidth|lfEscapement|lfOrientation|lfWeight|lfItalic|lfUnderline|lfStrikeOut|lfCharSet|lfOutPrecision|lfClipPrecision|lfQuality|lfPitchAndFamily

而在 Windows 中由 Class 表示

public abstract class LOGFONT {
    public int lfHeight;
    public int lfWidth;
    public int lfEscapement;
    public int lfOrientation;
    public int lfWeight;
    public byte lfItalic;
    public byte lfUnderline;
    public byte lfStrikeOut;
    public byte lfCharSet;
    public byte lfOutPrecision;
    public byte lfClipPrecision;
    public byte lfQuality;
    public byte lfPitchAndFamily;
    public static final int sizeof = OS.IsUnicode ? OS.LOGFONTW_sizeof () : OS.LOGFONTA_sizeof ();
}

这显然是 C 结构的“副本”:

typedef struct tagLOGFONT {
  LONG  lfHeight;
  LONG  lfWidth;
  LONG  lfEscapement;
  LONG  lfOrientation;
  LONG  lfWeight;
  BYTE  lfItalic;
  BYTE  lfUnderline;
  BYTE  lfStrikeOut;
  BYTE  lfCharSet;
  BYTE  lfOutPrecision;
  BYTE  lfClipPrecision;
  BYTE  lfQuality;
  BYTE  lfPitchAndFamily;
  TCHAR lfFaceName[LF_FACESIZE];
} LOGFONT, *PLOGFONT;
于 2017-12-20T08:53:20.077 回答