2008年10月4日

    最近重温C++,有个疑问,虚函数表的位置是在哪里,网上搜了下,呵呵,发现有个兄弟做了专门的研究。佩服佩服, http://blog.csdn.net/houdy/archive/2007/01/28/1496161.aspx
还有帖子也讨论这个问题http://topic.csdn.net/u/20070118/13/f2cf62e9-0e4b-4f36-afed-c0b646945d2c.html
发表于 2008-10-04 10:56 HFL's Blog 阅读(109) | 评论 (0)编辑 收藏

2008年5月17日

又一次,好长时间没写了,如果不是她说,也就不想写。
总喜欢事情可以在平稳中发展,不管我愿不愿意,事情还是沿着事情的轨迹向前。

2008,中国,不平静
大雪冰封
拉萨暴乱
圣火受阻
手足病疫情
直至 5月 罕见地震

2008,我,不平静
事业
爱情
家庭

2008.8.8 北京奥运会开幕
2008.10 我将开始准备走上社会

祝福中国 祝福我们
2008,我们一路向前
发表于 2008-05-17 19:42 HFL's Blog 阅读(500) | 评论 (0)编辑 收藏

2007年12月18日

由于项目可能要采取lpc21XX系列芯片(arm7),这两天看了下lpc2104的datasheet,想起以前玩过arm9(s3c2410)的实验板,发现两者的中断处理有一定不同的地方,下面简略说明,如有不对之处,还请指正!
申明:由于FIQ(快速中断)在实际使用中较少用到,而且在不同平台下处理方式也类似,下面仅对IRQ进行说明。
1.lpc2104(ARM7内核)
其IRQ中断有向量中断和非向量中断之分
对于向量IRQ,需要设置两个内容,分别为VICVectCntlX(0-15)和VICVectAddrX(X:0-15),在VICVectCntlX中设置对应的中断源号,在VICVectAddrX中设置中断处理程序的入口地址,优先级依次递减,当产生向量IRQ时系统会自动跳转到VICVectAddrX处,处理完后需对VICVectAddr做清零操作;
而对于非向量IRQ,只需填写VICDefVectAddr的内容,当产生非向量IRQ时系统会自动跳转到VICDefVectAddr处,此时需读VICIRQStatus的值,做相应处理,处理完后需对VICVectAddr做清零操作;
2.s3c2410(ARM9内核)
其IRQ相对较简单,不存在向量中断和非向量中断之分,当产生中断时,通过INTOFFSET寄存器即可判断是什么中断,但其中断优先级可变,具体可以参考相应datasheet。

关于关键字"__irq":其实只是编译器在遇到该关键字时会增加现场保存与恢复工作的代码(根据编译器不同,可能有所不同),其中比较重要的一点是将LR恢复到PC中,实现中断程序的返回,所以如果程序已用汇编代码保存恢复现场,并在最后已将LR恢复到PC中,则c处理函数中不需加"__irq",如用lpc2000模版生成的程序,否则应该加该关键字。

关于中断处理程序中的"写1清0":处理程序中用"|="和"="是有很大差别的,如T0IR = 0x01是将最低标志位清0,而T0IR |= 0x01是将T0IR中所有是1的位和最低位都清零,因为T0IR |= 0x01,是将T0IR和0x01相或后再回写,这一点可以在反汇编代码中看出,当然不同的编译器可能有所不同。

发表于 2007-12-18 22:30 HFL's Blog 阅读(2341) | 评论 (5)编辑 收藏

2007年8月20日

到瑞安做项目,5天,于是有了真正意义上的出差,出差的日子里每天面对都是隆隆的机器声,回到学校,见到熟悉的同学,熟悉的校园,突然发现学校真好,从来没感觉学校有今天这样好过!
发表于 2007-08-20 22:16 HFL's Blog 阅读(1278) | 评论 (0)编辑 收藏

2007年6月5日

总想写点东西,表达自己的情绪,经过大学四年,笔下文字却变得那么苍白!
一直以来,我都在走着中国传统教育所铺设的道路,循规蹈矩,安守本份,是对我最好的形容!
高中,大学,考研,一路走来,一路自然,一路麻木。

也许传统教育的目的就是造就本份的个性,在能想起的记忆中,很难找到几丝出格的回忆,仅有也只是儿时被玩伴欺负,回家找其父母告状而已。直至懂事,到该做出格的事的年纪,如果说儿时是乖,这时我也已经知道乖并不是好事,可出格的事,却始终做不出来,于是时常感慨,...,但也仅是感慨而已,并不采取什么实际行动。

世事变换无常,偶然的事,却常而发生。
等我下定决心,释放一下青春的激情的时候,现实情况却又不允许了(在一个相当忙碌并且紧张的实验室读研),于是我本份的个性又开始发挥作用了,按时工作,按时学习,日复一日。
...
记得毕业时送别晚会的主题是“青春散场”,
那时,我不信,我想我的青春刚刚开始,
现在,我坚信不疑!

发表于 2007-06-05 00:11 HFL's Blog 阅读(3581) | 评论 (4)编辑 收藏

2007年5月3日

最近看了下遗传算法,给大家做个简单的示例吧,以下思想全部出于《遗传算法-理论,应用与软件实现》。
示例为关于图像基元的识别,所谓图像基元识别,就是从一幅图像中识别特定形状的图形。如:在下图的右边大图中找到左边小图的位置。

算法思想如下:
待识别模式(小图)可用二维点列P 描述:
     P = {p (x 1, y 1) , p (x 2, y 2) , ... , p (x N , yN ) ) }
(x i, y i) 为相对于模式原点的坐标, P (•) 为相应的灰度值, 将模式放大M 倍, 旋转H, 并将
模式原点平移至(x c, y c) , 点列P 变为P*:
      P*=
其中
对于二值图像,可以定义适应度如下:R = Nb/N.
Nb为点序列中满足P*=P的点的个数,但该适应度函数导向性太弱,为此我们将二值识别图像进行预处理,转化为灰阶数为L的多值形式。(如有需要源码,请Email我,其实网上都有的)
以下为程序测试效果图:

动态跟踪效果图:

总结:遗传算法简单,关键的问题是如何把问题转到遗传算法可以解决的范畴。

发表于 2007-05-03 19:18 HFL's Blog 阅读(2081) | 评论 (0)编辑 收藏

2007年2月28日

最近接触了一些vc托管和非托管的混合编程,看的书是VC2003,使用的环境是VC2005,
以下对new和gcnew理解,如有错误,还请指正。
new是原来非托管下分配内存的方法,
在托管下,分为两种情况
1.VC2003下,没有gcnew
new除原来功能外,还包括对CLR堆上内存的分配,
此时需用       
#pragma push_macro("new")       
#undef new       
#pragma pop_macro("new")
从而取消原来MFC对“new”的定义,使用.net中的“new”,此时不需配对delete。
2.VC2005下,
new只有原来功能,而对CLR堆上内存的分配,需使用gcnew,此时不需要配对delete。
发表于 2007-02-28 22:02 HFL's Blog 阅读(2216) | 评论 (0)编辑 收藏

2007年1月20日

        好久没写了,借口是忙,其实是懒。
        人生来就是有惰性的,只不过人们把忙时的“懒”叫做“休息”,而把空闲时的“懒”才叫做“懒”。
        研究生的第一个学期的考试终于结束了,都考了十几年的“试”了,本应是轻车熟路,却依然紧张。相对以往的学习不同,考试的结束并不意味着马上回家。今年估计要到10-12号才能回家,不可否认,我是一个恋家的人,但没办法,人总要习惯于生活。
        关于学习。自从到了实验室,涉及到了很多方面的知识,protel画电路板,焊板子,单片机编程,... ,却都学的不深,只是点到则止,够用就行。项目进度并不能由人为进行控制,学习时常盲目性,只能期望以后会有所改变!
        关于父母。自从把父亲教会用qq后(虽然他一直念“qiu,qiu”),就经常在周末的时候和父母聊天,因为是在网上,所以就没了时间的限制,听着父母那唠唠叨叨的爱护,有时候都不免提高声音,让他们别管了,而事后总感觉十分后悔,难道是压力太大吗,也许吧!
        关于爱情。据说如果接电话的时候,习惯用右手拿手机的人,感情比较丰富,而用左手的人恰恰相反,而我正属于后者。也许这个原因,对于爱情,一直期待,无果,到现在连心仪的女生都没有。不会做一件事情,并不可怕,可怕的是没有目标,这就是我目前对爱情的状态。
        就这样吧,散乱的思绪。

发表于 2007-01-20 21:21 HFL's Blog 阅读(3499) | 评论 (2)编辑 收藏

2006年7月22日

   
    昨天吃完晚饭,跟我妈的同事聊天,一个可爱的丫头。
    我妈开玩笑说要认她做女儿,于是,她问我是否介意多一个妹妹,我反问,也许是姐姐呢,她们笑晕了,说,她,才19岁,而你,23岁了!
    我,23岁了,突然一阵感慨...
    ......
    青春在求学的岁月中渐渐逝去,而在回忆中却找不出青春的痕迹。
发表于 2006-07-22 19:33 HFL's Blog 阅读(7187) | 评论 (6)编辑 收藏

2006年7月10日

    
    以前就碰到了二进制文件转为16进制表示的数组代码的情况,当时采用了一个16进制编辑器得到了结果,前两天做测试bootloader的是又碰到了这种情况,到网上找了个16进制编辑器,找了好久都没有找了对应的菜单项(汗!),于是就自己写了个代码(写完之后居然又在16进制编辑器找了了对应的菜单项,更汗!),写都写了,就先保存吧,可能以后也还要用。
#include "stdio.h"
#include 
"stdlib.h"
#include 
"memory.h"

int main()
{

    FILE 
*v_fpLog, *fp;
    
int fSet = 0, fEnd = 0, i, j;
    
int filelen = 0, num, last, r;
    
char *pb, ch[6], cnum[11];
    
if ( (v_fpLog = fopen( "sjf.bin" , "rb+")) == NULL || (fp = fopen( "out.txt" , "w+a+")) == NULL) 
    
{
        printf( 
"The file was not opened");
        
return 0;
    }

    
else
    
{
        fseek( v_fpLog, 
0, SEEK_SET );
        fSet 
= ftell( v_fpLog );
        fseek( v_fpLog, 
0, SEEK_END );
        fEnd 
= ftell( v_fpLog );

        pb 
= (char *)malloc(fEnd - fSet );
        fseek( v_fpLog, 
0, SEEK_SET );
        fread(pb, fEnd 
- fSet, 1, v_fpLog);

        fwrite(
"unsigned char boot_bin["231, fp);
        memset(cnum, 
011);
        itoa(fEnd
-fSet, cnum, 10);
        fwrite(cnum, 
sizeof(cnum), 1, fp);
        fwrite(
"] = { "61, fp);        
        num 
= (fEnd-fSet)/16;
        last 
= (fEnd-fSet)%16;
        
for(i = 0; i < num; i++)
        
{
            
for(j = 0; j < 16; j++)
            
{
                memset(ch, 
06);
                r 
= (int)pb[j + 16 * i];
                r 
=  r & (0xFF);
                sprintf(ch, 
"0x%02x,", r);
                r 
= fwrite(ch, sizeof(ch), 1, fp);
                printf(
"%s ", ch);
            }

            fwrite(
" "11, fp);
            printf(
" ");
        }

        
for(i = 0; i < last; i++)
        
{
            r 
= (int)pb[i + 16 * num];
            r 
=  r & (0xFF);
            sprintf(ch, 
"0x%02x,", r);
            fwrite(ch, 
sizeof(ch), 1, fp);
            printf(
"%s ", ch);
        }

        fwrite(
"}"11, fp);
        free(pb);
        fclose(v_fpLog);
        fclose(fp);
    }

    
return 0;
}
发表于 2006-07-10 21:57 HFL's Blog 阅读(4336) | 评论 (2)编辑 收藏

2006年6月17日

    毕业的钟声即将敲响,仿佛空气中都充满了离别的味道,也许是受了这情绪的影响,这段时间什么事情也不想干,整天在宿舍里闲着。
    四年,就这样过去了,遗憾的结束,崭新的开始。
    一路走好!020511班的全体同学!
发表于 2006-06-17 11:11 HFL's Blog 阅读(2196) | 评论 (0)编辑 收藏

2006年6月8日

       数码管见过很多次了,可却没编过相关的程序,手册里正好有这个实验就做了一下。
    所谓数码管说来就是几个发光二极管按顺序排列(汗,我之前连这都忘了),这几个发光二极管阳极接在一起叫共阳极,反之,就叫共阴极,在另一端给个低/高电平,发光二极管就可以正常工作了。
     在DM2410平台上的数码管连接着74HC595移位寄存器,数据串行输入,并行输出。每出现一个CLK脉冲,数据向右移一位,每出现一个RCK脉冲的上升沿并行输出数据刷新为当前值。实验中首先应配置IO口,rGPGCON=rGPGCON&0xfffd5fff;rGPGCON=rGPGCON|0x15000;将GPG6,GPG7,GPG8设为output,GPG6接DATA OUT,GPG7接CLK,GPG接RCK,这由74HC595移位寄存器连接的管脚决定。
    下面给出两个主要函数:

//=================================
//名称:Led_8_Display
//功能:将8位数据诸位送出
//参数: void
//返回值: void
//=================================
void Led_8_Display(int data)
{
    
int j,i=7;
    U8 num;
    j
=data;
    
for (i=7;i>=0;i--)//共8位
        {
        num
=j%10;
        j
=j/10;
        Led_Output(DAT[num]);
//获得诸位的数据对应的段编码
        }


        
//RCK 脉冲
        rGPGDAT=rGPGDAT|0x100;
        Delay(
1);
        rGPGDAT
=rGPGDAT&0xfeff;
        Delay(
1);                //数据显示
}

//==================================
//名称:Led_Output
//功能:将每位数的8位段数据送出
//参数: void
//返回值: void
//==================================
void Led_Output(U8 data)
{
    
int i,j;
    j
=data;
    
for (i=7;i>=0;i--)//共8段
        {

        
if (j%2)
            rGPGDAT
=rGPGDAT|0x40;//输出1
        else
            rGPGDAT
=rGPGDAT&0xffbf//输出0
        j=j/2;

        
//CLK移位脉冲
        rGPGDAT=rGPGDAT|0x80;
        Delay(
1);
        rGPGDAT
=rGPGDAT&0xff7f;//移位脉冲
}


}
发表于 2006-06-08 12:49 HFL's Blog 阅读(3914) | 评论 (4)编辑 收藏

2006年5月30日

lcd驱动几天前就是这个样子了,这两天又忙着写论文,怎么就不行呢,不管了,发上来给大家看看,知道的兄弟请指点一下。lcd是支持18位(TFT),程序设置了16位,屏幕大小800*480,如需lcd 的datasheet请联系我。运行能看到图片(有时需注释掉,有时又不需,不知道为什么),但颜色不对,好象只有两种颜色。
2006-5-30
经过一笑兄的提醒,已经修改了部分代码,现在有时能看到正确的图像了,颜色也是对的,但还有个问题依然存在,就是经常屏幕没有任何显示,这时老是需要不注释掉和注释掉rLCDCON5 = (1<<11)|(1<<9)|(1<<8)|(1<<3)|(1<<0)都编译一遍才可以看到图像,还有IO口和上拉使能该怎么配置呢?现在是 rGPCCON = 0xaaaaaaaa; rGPDCON = 0xaaaaaaaa; 没有对上拉使能进行操作,一操作就又看不到图像了。还有刷新算法的问题,我也不太明白。
2006-6-1

#include "2410addr.h"
#include "Def.h"
#include "stdio.h"
#include "stdlib.h"
extern unsigned char gImage_123[];
unsigned int (*frameBuffer16)[800/2];
extern char Image$$RW$$Limit[];
void *mallocPt=Image$$RW$$Limit;
#define M5D(n) ((n) & 0x1fffff)
void * malloc(unsigned nbyte)
{
    void *returnPt=mallocPt;
    mallocPt= (int *)mallocPt+nbyte/4+((nbyte%4)>0); //to align 4byte
    if( (int)mallocPt > HEAPEND )
    {
         mallocPt=returnPt;
         return NULL;
    }
    return returnPt;
}
int Lcd_Init()
{if((U32)frameBuffer16==0)
 {
     frameBuffer16=(unsigned int (*)[800/2])malloc(800*480*2);
 }
 //rLCDCON1 = (rLCDCON1 & 0xffc0000) | (1<<8)|(3<<5)|(0xc<<1);
 rLCDCON1 = (1<<8)|(1<<7)|(3<<5)|(12<<1)|0; 
  rLCDCON2 = (32<<24)|(479<<14)|(11<<6)|(2);
  rLCDCON3 = (88<<19)|(799<<8)|(40<<0);
 rLCDCON4 = (13<<8) | (128<<0);
 //rLCDCON5 = (1<<11)|(1<<9)|(1<<8)|(1<<3)|(1<<0);
 rLCDSADDR1= ( ((U32)frameBuffer16>>22)<<21 ) | M5D((U32)frameBuffer16>>1);
 rLCDSADDR2= M5D((((U32)frameBuffer16+(800*480*2))>>1));
 rLCDSADDR3= (800) | ( 0<<11 );
 rLPCSEL &= (~7);
 rTPAL = 0;
 rLCDCON1 |= 1;
  return 0;
}
void _PutPixelG16(U32 x,U32 y,U16 c)
{
    if(x<800 && y<480)
        frameBuffer16[(y)][(x)/2]=( frameBuffer16[(y)][x/2] & ~(0xfffc0000>>((x)%2)*16) )
            | ( (c)<<((1-((x)%2))*16) );
}
void Lcd_Bmp( U16 x0, U16 y0, U16 x1, U16 y1 , unsigned char bmp[] )
{
    int x, y ;
    int m = 0;
    U16 t;
    for( y = y0; y < y1; y++ )  //画16色图片
    {
     for( x = x0; x < x1; x++ )
     {
      t = (bmp[m]<<8) | bmp[m+1];
         _PutPixelG16( x, y, t);
         m+=2;
     }
    }
}
int Test_lcd()
{
 Lcd_Init();
 Lcd_Bmp( 0, 0, 320, 240 ,gImage_123);
 return 0;
}

发表于 2006-05-30 11:27 HFL's Blog 阅读(5185) | 评论 (5)编辑 收藏

2006年5月23日

看了两天了,网上、资料都大概看了一下,就是几个寄存器嘛,设置来设置去的,怎么就不行呢,
今天把3c44b0x下的驱动移植过来,还是不行,
要毕业了,有时候也不是十分的投入去做这些东西,恩,还要继续努力......
发表于 2006-05-23 22:02 HFL's Blog 阅读(2240) | 评论 (0)编辑 收藏

2006年5月18日


申明:本篇只适合没有接触过驱动或者初学驱动的朋友,需要代码的朋友请联系我。
    在本文中阐述的驱动是用windriver做出来的,没有采用DDK或DriverStudio,可能看起来并不像是一个”很正式“的驱动,而且本文中的驱动程序不可以用于DirectShow接口。对于DDK和DriverStudio我也了解了一些内容,在刚开始的时候我是满怀激情的想用DDK或DriverStudio的,很快我的激情之火就被无情的熄灭了,对于一个完全没有接触过驱动开发的人来说(在这之前我都不知道系统是如何找到某个设备驱动的),我个人觉得DDK或DriverStudio有点难了,当你对DDK或DriverStudio有些了解的时候,当你有了想编一点代码的欲望时候,你会发现结果是多么的残酷,要么运行出错,要么黑屏重启,最后你无处下手,特别是编一个硬件设备不是自己做的,对于一些产商命令都不熟悉的时候,对于初学者来说,DDK或DriverStudio显得特别难,刚开始我就是这个样子。但在我个人看来在了解了一些驱动的知识后,在用DDK或DriverStudio遇到困难的时候,不妨试试windriver,你会兴奋的发现这个工具居然不用做什么工作就可以和你的硬件通信了,这时候你会对windriver有更好把握,因为对象始终是同一个设备,共同之处还是有的。
    虽然在用windriver时,你只是开发了一个看起来只是开发了一个位于应用层的软件,其实它相当于把一部分驱动程序功能提到应用程序来做了(注意:只是一部分),当然这需要windriver的api支持(所以会影响速度),其实我想这也就是windriver的开发思路吧。而且我想如果在windriver下做通的话,再用DDK或DriverStudio难度也会下降不少吧,特别是对于USB驱动来说,搞清楚URB后应该就比较容易了。好了,不多说了,下面就步入正题吧。
1.准备--知己知彼,百战不殆
    对于像我这样的驱动文盲来说,了解一些驱动相关的知识是必需的。我们应该对驱动有个概念性的把握,像驱动是什么,驱动的作用是什么,硬件是如何找到对应的驱动的,应用程序又是如何与硬件通信的,驱动最终产生文件是什么,开发驱动都有什么方式等。在这个过程中,我们可以随便找些驱动开发的书看看,积累一些概念性的知识。
2.工具--欲先攻其事,必先利其器
     说到开发,当然需要一个开发工具了,在这里VC是离不开的,但开发驱动,必需还有另外一个工具要我们选择。其实也就是用什么方式来产生驱动的框架,就象VC下的应用程序可以自动产生一个初始的框架一样。在这里,我们有三种方式可以选择:1).从DDK自带的例子(此时许包含DDK的编译工具),如usbintel出发编写,这种方式编出来的驱动质量应该是最好的,但同时难度也是最大的。
2).用DriverStudio(此时许包含DDK的编译工具),其实DriverStudio就是对DDK进行了封装,其难度虽然有所下降,但对于我这样的初学者还是困难重重,有个比喻打的很好,DriverStudio与DDK的关系,就像VC与SDK的关系。
3).用windriver,正如前面所说,windriver其实带了一个它自身的驱动(普通模式下),所以它可以直接与你的硬件通信,当然你需要对你的硬件进行一些设置,如一些产商命令的发送,也就是是一些寄存器的设置。然而,硬件往往都有很多的寄存器,所以要自己手动一个个设置显得很繁琐,如果你的硬件已经有现成的驱动(如摄像头),我们就可以借助像bushound工具跟踪驱动加载的整个过程,然后自己写个程序将结果转换为代码,再加上自己需要的特殊设置就可以了,我就是这样的做的,不过这样的代码风格可能显得很差。由于在这个过程中你需要对产商命令加以了解,所以看硬件的datasheet是必需的,这也是我选择ov511+芯片的摄像头的原因,它的datasheet是公开的。
3.看linux下源代码--它山之石,可以攻玉
     由于linux是开源项目,所以在windows下没有的源代码,在linux往往可以找到对应的源代码,摄像头驱动就是这么一种情况。摄像头图像数据是很不好分析的,就算是ov511+摄像头的未压缩数据也不好分析,但通过linux的源代码我们可以发现(320*240, yuv420):它是通过块来进行处理的的,一块384 bytes,64 bytes u,64 bytes v,256 bytes y,可以发现其一帧数据是不是标准的yuv420格式。所以图象处理基本流程应为ov511+的yuv420->标准yuv420->rgb24。如果是对于压缩的数据,那还要先进行一个解码的工作,这也是比较繁琐的,有耐心的话可以继续看linux的源代码,不过我就没做了。
总结--乘风破浪会有时,直挂云帆济沧海
     在这次学习的过程,我得出一个经验是:知识是需要一个积累的过程的,心态要放平衡,不要急于求成。由于刚开始的时候起点太高(刚开始的时候是想编个通用驱动的),对难易程度把握不准,自己又没有基础,所以很郁闷,但慢慢的,随着对摄像头驱动的了解,意识到通用其实是很困难的,你需要对各个摄像头芯片都进行编程,然后集成到一个代码里(个人理解),但有些产商是不公开datasheet,如zc301,这使得开发驱动显得尤其困难,所以现在只是选择了一款芯片:ov511,也是只对其未压缩数据进行处理了,但总算是能看到摄像头的图像了,虽然这离初始的目标还很遥远。
发表于 2006-05-18 17:11 HFL's Blog 阅读(2773) | 评论 (0)编辑 收藏

2005年10月15日

下载可执行文件 
下载源代码 
这是一个代码管理器,做了好长时间了,一边做别的事一边做这个,速度真的有点慢,呵.后台数据库采用了access,由于时间的原因,程序有很多细节还没处理.(注意:软件默认只支持vc6.0的文件类型,要导入其他类型文件,需设置文件类型)
首先,讲一下主要功能特点:
1.本软件中的所有收集代码全部置于后台数据库中,
使用前可将原以收集的代码导入到数据库中,左端树形列表中的内容以及源代码的改动直接对应数据库中的改动.
2.悬浮框类似于FlashGet的,可接受文件的拖曳功能.
3.源代码编辑器加有显示行号和高亮显示的功能.
下面在讲一下不足之处,
1."生成当前工程"的功能没有完成.
2.源代码的着色问题也不是非常理想,
当然首先要感谢ZhengXu,我的着色源码就来自于http://www.vckbase.com/document/viewdoc/?id=1243,但是其还有一些欠缺之处,如刷新时效率太低,中英文转换之间还有些问题;其实对于源代码的着色,我考虑了比较长时间,也曾试过CodeMax这个控件,不过微软vs.net的代码编辑器让我十分欣赏,不知其如何实现,如果各位知道的话,或关于代码着色有什么好提议的话,希望能告诉我,先谢了.
3.导入多文件时,速度太慢,出现短暂交互暂停,没有启用多线程机制,来实现交互,在删除拥有过多级的文件目录时,也存在同样的问题.
4.本版本只支持vc6.0的文件类型的高亮显示,其他类型将在以后更新.
5.加入XP风格后,不知道为什么工具栏显示有点不正常.
以上为主要不知之处,当然不足之处还是是很多的,恳请大家批评指正.
胡峰令 2005-10-15 E-mail:hflaa123@yahoo.com.cn

本来是想再进行后续版本的更新,所以迟迟没有发布源代码,但在接下去的研究生时间里,估计要转到嵌入式去,更新的事不知要到什么时候,所以就先把源码发上来了.
胡峰令 2006-4-18 E-mail:hflaa123@yahoo.com.cn
发表于 2005-10-15 13:39 HFL's Blog 阅读(15271) | 评论 (18)编辑 收藏

2005年10月9日

 下载源代码  
简单的东西,不过都是自己做的,就放上来了,
本来想多写几个算法的,可后来由于时间关系就不了了之了.
发表于 2005-10-09 15:38 HFL's Blog 阅读(8093) | 评论 (5)编辑 收藏