梁肇新编程日记(1) 2001年 46期 2000年3月2日 星期四 多云   今天的工作计划很明确,主要是完成以下3个方面:   1.解决如何剪切/复制的功能   2.改善操作显示   3.预览窗的刷新处理   在处理大眼睛的剪切和复制功能的时候,我并不知道是怎样实现的,要在大眼睛中进行剪切/复制,然后放到“资源管理器”中,或者进行相反的操作。为了实现这个功能,有两种方法:一、使用SPY来查看所有的消息处理;二、使用Softice查看函数的调用。   复制和剪切除了基本的CF_HDROP外,还需要一个登记的类型。Performed DropEffect及Perferred DropEffect就是这种类型,我们分别将它们设置为2和1,各自表示CUT及COPY。其中,Perferred DropEffect为CFSTR_Perferred DropEffect的定义。   DROPEFFECT_NON=0 DROPEFFECT_COPY=1   DROPEFFECT_MOVE=2 DROPEFFECT_LINK=4   DROPEFFECT_SCROLL=8000000-0H   这些与Idataobject有关,如此处理后就可以解决剪切/复制的问题了。而相应的粘贴和创建快捷方式可以由系统自动完成。   接下来研究一下如何显示CUT状态和相应显示的复印。   CUT状态要在WM_DESTROYCLIPBOARD消息后清除掉,这个消息在Emptyclipboard时调用,消息完成后才返回,从而保证了剪贴板不混乱。   启动的时候可以先展开目录树来初始化列表。但是导致程序启动很慢,所以要想办法先显示列表,用一个线程来显示初始化目录树。这样就可以大幅度提高大眼睛的启动速度。   由于列表与目录树IDlist和Ishellfolder关联,那么首先要建立IDlist,再建立Ishellfolder对象,可以实验出来但不是太稳定。而原来在启动ShowWindow()及UpdateWindow()导致软件启动时看上去像死机一样,现在加上这种处理之后视觉效果就与原来有很大的不同。   最后的问题,关于预览窗的刷新处理,解决了它,今天的工作就算圆满完成。   在预览窗显示文件的时候,由于有小区域的错乱,导致在PAINT中只会刷新无效区域,我们判断一定是由于在PAINT的消息中进行刷新的结果。即使用BeginPaint的HDC也一样,这是程序处理有效区域的混乱导致的。ICON的解码有一些问题,有大小图标时不太正常。在显示预览图时,会有烂块残余。可能是处理小图时的刷新解决动态有问题。在进行刷新时,当图小于32时的分析有问题,导致图像显示出错。我们发现这种情况仅在显示小图时才有。问题找到了,也就好解决了。