首页
社区
课程
招聘
[求助]关于[carvingdbg]的代码有点问题请教。
发表于: 2005-4-30 00:05 5463

[求助]关于[carvingdbg]的代码有点问题请教。

2005-4-30 00:05
5463
我用CVS下载了carvingdbg的最新的代码,研究之后发现在显示反汇编代码时使用了一个fastlist库。我觉得它画的很好,想学习一下,不知道版主能不能把fastlist.lib的代码也共享一下,谢谢。

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (9)
雪    币: 2319
活跃值: (565)
能力值: (RANK:300 )
在线值:
发帖
回帖
粉丝
2
嗯,我简单介绍一下它

FastList 是我在开发 carvingdbg 时,为了改善传统 ListView (windows 自带的列表窗口) 速度和功能的不足,继而开发出来的。

ListView 的控制复杂,弹性也不足够,我们需要一个完全掌握源码,速度优化,而且可以随时扩展的列表窗口,用来在 carvingdbg 的任何部份中使用。因此, FastList 是独立开发成一个可以用于多种环境的独立窗口,透过传统方法 CreateWindowEx 来产生

在我们的 project 里,你只要用 CVS 连接,下载 module 名字设为 fastlist (小写) ,便可以下载到 fastlist library 的源码

现时的 FastList 还是很初期的阶段,功能比较少,只拥有两种显示模式
2005-4-30 09:13
0
雪    币: 223
能力值: (RANK:130 )
在线值:
发帖
回帖
粉丝
3
谢谢,下载到了,粗粗看了一下,准备明天仔细研究。
2005-4-30 22:19
0
雪    币: 223
能力值: (RANK:130 )
在线值:
发帖
回帖
粉丝
4
为什么在fastlist里有两个窗口过程?没看懂啊!
2005-5-3 00:12
0
雪    币: 2319
活跃值: (565)
能力值: (RANK:300 )
在线值:
发帖
回帖
粉丝
5
它的结构是由两层 widnow 构成,父 window 有一条 scroll bar,负责对外的信息处理,和卷动的工作。子 window 是主要处理 WM_PAINT,负责绘画内容

现在的源码有可能会发现一两行不关相的代码,不明白其意思,它们有可能是 debug时写的代码,没有功用,是将来会删除的

简单来说,源码的流程可以这样看 :

main window ? WM_CREATE  
父窗口的wm_craete信息处理,这里是整个 fastlist 的主要创建地方,首先是向系统拿取内存,建立一个 FLDATA 的数据,这个数据的位置将写入窗口的额外区域 (用 SetWindowLong) ,其后所有关于这个 fastlist 窗口的资料,都会存放在这个 FLDATA 内。

其次,是建立一个子窗口,并建立一个 DC (用作 back buffer 的 device context)。还有其它相关的设定工作。

fastlist functions
整个 fastlist 由各种function 操作,首先,使用者建立 fastlist 后,需要使用 flAddColumn  来增加 column (栏)  (刚建立的时候会自动产生一个 column),接着便可以用 flAddRow 来加入 row(列)。 每一行 row 的 sub item,可以由 flAddSub 来增加。

Child window ? WM_PAINT
子窗口的 paint 信息,是负责绘画 fastlist 的主要内容,首先计算出现在需要绘画的 row位置,然后从那里开始把 linked list 内连接的 row 依序绘画出来。
要注意的是,在 fastlist 源码里有时候会看见一些比较复杂的部份,像甚么 CallBack 之类的,他们是用于 call back 模式的一些代码,在那个模式下,fastlist 会依照设定好的 function pointer ,适当时向父程序进行 call back,要求建立 fastlist 的父程序提供一些 customize 的处理。在 wm_paint 可以看到,绘画 highlight row 的那部份,是可以由 call back 交由父程序自行处理的。 (由父程序决定那一行需要绘画 highlight )

以上都是基本的描述,希望有帮助
2005-5-3 09:18
0
雪    币: 2319
活跃值: (565)
能力值: (RANK:300 )
在线值:
发帖
回帖
粉丝
6
有一点值得注意 ,建议 hefei2 兄每天用 CVS update 来取得最新的源码,有些时候,代码可能在一两天之间大规模修改
2005-5-3 09:26
0
雪    币: 223
能力值: (RANK:130 )
在线值:
发帖
回帖
粉丝
7
有一点值得注意 ,建议 hefei2 兄每天用 CVS update 来取得最新的源码,有些时候,代码可能在一两天之间大规模修改


呵呵,版主太客气了,我可能小你好几岁呢。
2005-5-3 10:23
0
雪    币: 223
能力值: (RANK:130 )
在线值:
发帖
回帖
粉丝
8
我就是用cvs update 来取得最新的源代码,但不知是不是因为路由器设置的问题,要联上服务器太困难了,可能要试上十几次才能联上一次,还真是……

谢谢版主的指导,现在觉得看了carvingdbg的代码,真的学到了不少东西。
2005-5-3 10:52
0
雪    币: 2319
活跃值: (565)
能力值: (RANK:300 )
在线值:
发帖
回帖
粉丝
9
最初由 hefei2 发布
我就是用cvs update 来取得最新的源代码,但不知是不是因为路由器设置的问题,要联上服务器太困难了,可能要试上十几次才能联上一次,还真是……

谢谢版主的指导,现在觉得看了carvingdbg的代码,真的学到了不少东西。


你的路由器有没有像 DMZ 的功能,可以简单地把你的主机的所有 port 显露在 internet 上 ?
2005-5-3 11:07
0
雪    币: 223
能力值: (RANK:130 )
在线值:
发帖
回帖
粉丝
10
有DMZ的功能,但不知道CVS的端口号是多少
2005-5-3 11:20
0
游客
登录 | 注册 方可回帖
返回
//