|
发表于 2012-8-28 12:13:43
|
显示全部楼层
找到原因了。设ClearType字体后fuOptions 变成ETO_GLYPH_INDEX,绘制方式变了
本帖最后由 sunfrank 于 2012-8-28 12:35 编辑
ExtTextOut function
fuOptions [in]
Specifies how to use the application-defined rectangle. This parameter can be one or more of the following values.
ETO_GLYPH_INDEX
The lpString array refers to an array returned from GetCharacterPlacement and should be parsed directly by GDI as no further language-specific processing is required. Glyph indexing only applies to TrueType fonts, but the flag can be used for bitmap and vector fonts to indicate that no further language processing is necessary and GDI should process the string directly. Note that all glyph indexes are 16-bit values even though the string is assumed to be an array of 8-bit values for raster fonts.
For ExtTextOutW, the glyph indexes are saved to a metafile. However, to display the correct characters the metafile must be played back using the same font. For ExtTextOutA, the glyph indexes are not saved.
一般而言,普通的第三方程序不会蛋疼的去直接使用 ETO_GLYPH_INDEX .
如果我们截获到这种情况, 很有可能是更高级的api调用所致.
比如 DrawTextA/W TextOutA/W 等.
具体情况,调试下断点, 看callstack就能一目了然.
很多时候都是 DrawTextA/W -->usp10.dll --> ExtTextOutW - Fuck_ExtTextOut(HDC__ * 0x87011406, int 0, int 0, unsigned int 4100, const tagRECT * 0x0013f75c {top=0 bottom=0 left=0 right=0}, const unsigned short * 0x771e4ef0, unsigned int 1, const int * 0x0013f738) line 26
- GDI32! 771e4cd0()
- GDI32! 771e4824()
- GDI32! 771e40d6()
- GDI32! 771e3f2a()
- GDI32! 77227294()
复制代码 |
|