65.9K
CodeProject 正在变化。 阅读更多。
Home

如何创建枚举和回调函数

starIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIconemptyStarIcon

1.58/5 (9投票s)

2005 年 4 月 2 日

CPOL

1分钟阅读

viewsIcon

67427

downloadIcon

944

本文描述了如何声明枚举函数

image002.jpg

引言

你是否见过像 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 文件中的所有部分,你可以做任何你想做的事情! 欢迎提出任何意见和评论。 或者问题……

© . All rights reserved.