Visual C++ 7.1Visual C++ 7.0Visual Studio .NET 2003Windows 2000Windows XP初学者开发Visual StudioWindowsC++
如何创建枚举和回调函数
本文描述了如何声明枚举函数
引言
你是否见过像 EnumFunctions 这样的函数?比如 EnumWindows 等。你是否好奇它们是如何创建的? 在本文中,我们将创建一个简单的枚举函数! 放轻松,阅读本文直到结尾!
什么是枚举函数?
这种类型的函数是……!? 让我这样解释:假设你有一些水果。好吗? 一些苹果、橙子和香蕉。 你正在寻找苹果。 并且,对于你找到的每个苹果,你都会喊道:“嘿,我又找到一个苹果了!” 这就是这种类型函数的作用:对于每个元素,返回一些信息。
开始吧
声明一个枚举函数很简单。 首先,你需要一个变量类型来告诉函数输入是什么类型的函数。 参见这段代码片段(头文件中的声明)
typedef BOOL (CALLBACK*YOURPROCTYPE)(FirstType,SecondType,...);
现在看看我的
typedef BOOL (CALLBACK*MYPROC)(LPCTSTR);
以及声明 EnumFunction
ReturnType WINAPI EnumFunction(YOURPROCTYPE lpProcname,arg-list,…);
还有我的
BOOL WINAPI EnumFunc(MYPROC lpProc);
EnumFunc
将参数传递给回调函数
ReturnType CALLBACK yourProcName(FirstType,SecondType,...);
请注意,此回调函数的参数列表必须是你提供给 YOURPROCTYPE 的内容
BOOL CALLBACK MyProc (LPCTSTR prompt);
这是我的示例代码声明
typedef BOOL (CALLBACK*FILESPROC)(LPCTSTR);
void WINAPI EnumFiles(FILESPROC lpEnumFiles,LPCTSTR lpszFileName);
int CALLBACK EnumFilesProc (LPCTSTR lpszFileName);
现在是 EnumFiles
函数。 它的任务是在给定的路径中查找文件,并为每个文件调用回调函数
void WINAPI EnumFiles(FILESPROC lpEnumFiles,LPCTSTR lpszFileName)
{
CString nfle;
numoffiles=0;
CFileFind file;
BOOL bFind=file.FindFile(lpszFileName,NULL);//Find first file in the given
//path
while (bFind)//While bFind==True continue finding...
{
bFind=file.FindNextFile(); //Find next file
numoffiles=lpEnumFiles(file.GetFileName());//Call given callback function
//by user with appropriate inputs
}
nfle.Format("%d Files found",numoffiles);
AfxMessageBox(nfle);//Give the user number of files found in
//the given path
}
BOOL CALLBACK EnumFilesProc(LPCTSTR lpszFileName)
{
numoffiles++;
list->InsertString(list->GetCount(),lpszFileName);
return numoffiles;
}
现在要调用 EnumFunction
,你只需要编写一些代码
list->ResetContent();
EnumFiles(EnumFilesProc,"C:\\*.exe");
在这个源代码中,我们将获取一个路径并枚举路径中的所有文件! 我使用这种枚举技术来获取 INI 文件中的所有部分,你可以做任何你想做的事情! 欢迎提出任何意见和评论。 或者问题……