www.pudn.com > KILL.rar > RapidFinder.h


// RapidFinder.h: interface for the CRapidFinder class. 
/*=================================================================== 
 
/===================================================================*/ 
////////////////////////////////////////////////////////////////////// 
 
#if !defined(AFX_RAPIDFINDER_H__CABCFE4E_C992_11D6_A1A8_00902758778B__INCLUDED_) 
#define AFX_RAPIDFINDER_H__CABCFE4E_C992_11D6_A1A8_00902758778B__INCLUDED_ 
 
#if _MSC_VER > 1000 
#pragma once 
#endif // _MSC_VER > 1000 
 
#include "stdafx.h" 
#define OP_FILENAME    0x01 
#define OP_FILETEXT    0x02 
  
#define WM_THREADEXIT    WM_USER+100  
#define WM_THREADCOUNT   WM_USER+101  
#define	WM_FINDERITEM    WM_USER+102  
#define WM_THREADPAUSE   WM_USER+103  
#define WM_FINDERFOLDER  WM_USER+104 
class CRapidFinder   
{ 
//选项结构定义(未完成)----------------------------------------------------------- 
typedef struct tagFinderOption 
{ 
	BYTE OptionFlag; 
	//Bit1: bSubFinder;  搜索子目录  
	//--------文件名-------------- 
	//Bit2: bCaseMatch;  匹配大小写 
	//Bit3: bMatchAll;   全字匹配 
	//------------------------------- 
	//Bit4: bSeekToTime; 按时间搜索 
	//Bit5: bSeekToSize; 按大小搜索 
}  FINDEROPTION; 
 
//函数区———————————————————————————————————— 
public: 
	CRapidFinder(); 
	CRapidFinder(HWND MainHwnd,CString MatchName="*.*",CString MatchDir=""); 
	virtual ~CRapidFinder(); 
	 
	//初始化设置 
	void FinderSet(HWND MainHwnd,CString MatchName="*.*",CString MatchDir=""); 
	void ThreadSet(LONG MaxThreadCount=5,int priority=0); 
	void FindWithText(LPCTSTR lpText,int count); 
 
	//搜索选项 
	void FinderOption(FINDEROPTION FinderOption); 
     
    //程序操作 
	BOOL StartFinder();        //开始查找 
	void PauseFinder();        //暂停查找 
	void ResumeFinder();       //继续查找 
	void StopFinder();         //停止查找 
	void FinderReset();        //查找重置 
     
	//获取结果 
	LONG GetThreadCount(){return m_MaxThreadCount;};     //取得当前线程数 
	int  GetThreadPrioriy(){return m_Priority;}; 
	 
	LPCTSTR GetErrMsg()const; 
	int GetErrNo()const{return m_ErrNo;}; 
//------------------------------------------------------------------- 
#ifdef _DEBUG	 
    CString OutputPath(); 
#endif 
//--------------------------------------------------------------------- 
private: 
	void CreatePathList();      //规格化输入路径 
	 
	inline CString& Trim(CString &string){string.TrimRight();string.TrimLeft();return string;}; 
    inline void SetErrNo(int ErrNo){m_ErrNo=ErrNo;}; 
     
	//创建一个线程 
	static HANDLE StartThread(LPTHREAD_START_ROUTINE lpStartAddress,LPVOID lpParam); 
    //主线程与查找线程函数 
    static DWORD WINAPI ThreadProc(LPVOID lpParam); 
    static DWORD WINAPI MainThreadProc(LPVOID lpParam); 
 
    BOOL __fastcall MatchProc(CString &findpath); 
	BOOL __fastcall FindTextFromFile(CString &findpath); 
	int*  CalNextPos(); 
 
//数据区——————————————————————————————————— 
private: 
	HWND m_MainhWnd;       //主窗口句柄 
	CStringList m_DirList; //临时目录表 
	CString m_strFileName; //查找文件名 
	CString m_strFileDir;  //查找目录 
	LONG   m_MaxThreadCount; //最大线程数 
	BYTE * m_lpText;       //包含文字 
	int  * m_NextVal;        //模式匹配之用 
	int    m_TextSize; 
	BYTE   m_Option;         //搜索选项 
	 
	LONG m_ActiveCount;    //当前活动线程数 
	int m_Priority;        //线程优先权 
	HANDLE *m_hThrds; 
	int m_ErrNo;		   //错误代码 
 
    HANDLE m_hExitEvent; 
	enum EXIT_CODE{EXIT,PAUSE,STOP,ERR}; 
	EXIT_CODE m_ExitCode; 
 
	//临界区 
	CRITICAL_SECTION m_gCriticalSection; 
 
	//优先权常数 
	const static int HIGHEST_PRIORITY; 
	const static int ABOVE_NORMAL; 
	const static int NORMAL_PRIORITY; 
	const static int BELOW_NORMAL; 
	const static int LOWEST_PRIORITY; 
 
	//错误信息 
	const static LPCTSTR ErrMsg[]; 
}; 
 
#endif // !defined(AFX_RAPIDFINDER_H__CABCFE4E_C992_11D6_A1A8_00902758778B__INCLUDED_)