VBGood网站全文搜索 Google

搜索VBGood全站网页(全文搜索)

VB爱好者乐园(VBGood)

 找回密码
 立即注册
搜索
楼主: 19900603

[原创] [开源]之另类Edit[代码着色器完美版]无权限,免金币

[复制链接]
 楼主| 发表于 2012-8-28 12:05:48 | 显示全部楼层
本帖最后由 19900603 于 2012-8-28 12:09 编辑
sunfrank 发表于 2012-8-28 11:31


别用那么偏门的字体啊。。 还有你的什么系统啊 ? 按钮汉字还不显示

DeBugStrW Byval lpString  都出乱码。。。让我杂分析。。

点评

我好喜欢Consolas 。。  发表于 2012-8-28 20:53
DeBugStrW Byval lpString 都出乱码是TextBox乱码  发表于 2012-8-28 16:41
这个字体多有名,是微软官方的等宽字体,用于VS2012  发表于 2012-8-28 12:14
回复 支持 反对

使用道具 举报

发表于 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
  1. 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
  2. GDI32! 771e4cd0()
  3. GDI32! 771e4824()
  4. GDI32! 771e40d6()
  5. GDI32! 771e3f2a()
  6. GDI32! 77227294()
复制代码

点评

F**K.......汗。。。  发表于 2012-8-28 20:54
有办法解决么  发表于 2012-8-28 12:52
ETO_GLYPH_INDEX  发表于 2012-8-28 12:30
4102 -> 4100  发表于 2012-8-28 12:23
http://www.google.com.hk/url?sa=t&source=web&cd=3&cad=rja&ved=0CDgQFjAC&url=http%3A%2F%2Fblog.csdn.net%2Fnorsd%2Farticle%2Fdetails%2F5304134&ei=M0Y8UL-uM6ikiAeEz4DgBA&usg=AFQjCNHMTDv7kBW   发表于 2012-8-28 12:19
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-8-28 12:45:18 | 显示全部楼层
获取指定行文本内容 是 SendMessage(Hwnd,EM_GETLINE,n,Buffer)
谁知道如何获取 第N行在内存中的指针呢? 当然是在 TextBox 中的指针

点评

你也打算通过行号高亮代码了?  发表于 2012-8-28 13:15
回复 支持 反对

使用道具 举报

发表于 2012-8-28 13:16:39 | 显示全部楼层
19900603 发表于 2012-8-28 12:45
获取指定行文本内容 是 SendMessage(Hwnd,EM_GETLINE,n,Buffer)
谁知道如何获取 第N行在内存中的指针呢?  ...

你只要得到Textbox自己Buffer的指针就行了然后EM_LINEINDEX
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-8-28 13:21:59 | 显示全部楼层
sunfrank 发表于 2012-8-28 13:16
你只要得到Textbox自己Buffer的指针就行了然后EM_LINEINDEX

不行 得到的地址不一样。。我想获取某行对应的ExtTextOut_Hook函数里 lpString 缓存指针
回复 支持 反对

使用道具 举报

发表于 2012-8-28 13:26:44 | 显示全部楼层
19900603 发表于 2012-8-28 13:21
不行 得到的地址不一样。。我想获取某行对应的ExtTextOut_Hook函数里 lpString 缓存指针

http://social.msdn.microsoft.com ... 1-9c0d-83785798d500
lpString 缓存指针不是Copy的?而改字体后 The lpString array refers to an array returned from GetCharacterPlacement
回复 支持 反对

使用道具 举报

发表于 2012-8-28 13:32:30 | 显示全部楼层
19900603 发表于 2012-8-28 13:21
不行 得到的地址不一样。。我想获取某行对应的ExtTextOut_Hook函数里 lpString 缓存指针

Textbox自己Buffer的指针怎么得到

点评

这样子貌似是取到了临时变量的地址 。。。  发表于 2012-8-28 16:38
文本的指针 应该是StrPtr(TextBox.Text), 这样获取到的应该不准吧。。  发表于 2012-8-28 16:37
回复 支持 反对

使用道具 举报

发表于 2012-8-28 13:44:17 | 显示全部楼层
感觉语法高亮还是自绘比较好,这样的遇到续行符之类的就麻烦了.....
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-8-28 14:20:42 | 显示全部楼层
续行符 ? 类似于 VB的 _么?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-8-28 14:33:02 | 显示全部楼层
本帖最后由 19900603 于 2012-8-28 14:35 编辑


修改这后照样继续着色


要是能取到 每行文本的lpString 的话那就爽歪歪了

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

文字版|手机版|小黑屋|VBGood  

GMT+8, 2022-7-1 03:21

VB爱好者乐园(VBGood)
快速回复 返回顶部 返回列表