日期:2014-02-07  浏览次数:20575 次


    前些日子写软件时,需要实现一个功能,就是在Tree中快速定位节点,比如注册表编辑器左边的Tree,只要给出Tree中的节点路径(以“\”分隔),就可以快速将树展开,并将当前节点定位到指定的节点。功能的实现并不难,但稍有些麻烦。原因在于,如果是本进程中的Tree,只要发消息就可以了,但如果是另外一个进程中的Tree,就要在那个进程中申请内存,将Tree节点的文字复制到这块内存,然后再把这块内存的数据复制到本进程的一块内存中,才能与指定的节点路径相比较。由于这个功能还有一些可一般化的东西,所以就写了一个DLL,只要给出Tree的句柄和节点路径,就可以展开这颗树并定位节点。



     DLL源代码如下:



/********************************************************************/



/* 文件名: Tree.cpp                                                 */



/*                                                                  */



/* 功能: 标准 DLL ---- 跨进程展开 SysTreeView32 中指定的节点        */



/*                                                                  */



/* 作者: 卢培培 (goodname008)           时间: 2005.02.18            */



/*                                                                  */



/* BLOG: http://blog.csdn.net/goodname008                           */



/********************************************************************/




 


#include "stdafx.h"



#include "Tree.h"



#include "commctrl.h"



#include <string>




 


using namespace std;




 


BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)



{



     switch (ul_reason_for_call)



     {



         case DLL_PROCESS_ATTACH:



         case DLL_THREAD_ATTACH:



         case DLL_THREAD_DETACH:



         case DLL_PROCESS_DETACH:



              break;



     }



    return TRUE;



}




 


/********************************************************************/



/* 功  能: 跨进程展开 SysTreeView32 中指定的节点



/*<