请参阅以下代码。
MyEnumProc仅使用以下代码运行一次。但是如果我注释掉IsWindowVisible(wnd);它会多次运行。
为什么IsWindowVisible会发生这种情况(只运行一次)?我认为IsWindowVisible只是一个检查wnd属性的函数吗?
test.c的代码:
#include <windows.h>
#include <stdio.h>
BOOL CALLBACK MyEnumProc( HWND wnd, LPARAM lParam )
{
printf("run\n");
IsWindowVisible(wnd);
}
int main( void )
{
EnumDesktopWindows( NULL, MyEnumProc, 0 );
printf("end\n");
return 0;
}
我的环境是:
Windows XP SP3。
gcc 3.4.6(mingw)
编译选项是:gcc -o test.exe test.c
我编译并在cmd.exe中运行test.exe。
答案 0 :(得分:3)
您必须返回一个值。我希望你的编译器警告你,你不是。如果它没有警告你,那么你应该改变选项以使它这样做。
继续枚举,回调 函数必须返回TRUE;停止 枚举,它必须返回FALSE。
此终止枚举的功能允许您使枚举短路。找到所需的项目后,无需继续接收回调。有许多Windows API函数遵循这个习惯用法。
答案 1 :(得分:2)
EnumDesktopWindows希望您从MyEnumProc返回一个值:
return TRUE;
阅读文档以获取更多信息。