📄 rapidfinder.h
字号:
// RapidFinder.h: interface for the CRapidFinder class.
/*===================================================================
作者:Kelvin U.V
时间:2002-9-15
功能:多线程文件查找
版本:1.0
/===================================================================*/
//////////////////////////////////////////////////////////////////////
#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_)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -