Почему IsWindowVisible выполняет обратный вызов EnumDesktopWindows только один раз? - PullRequest
1 голос
/ 09 марта 2011

См. Следующий код.

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

Я выполнил компиляцию и запустил test.exe в cmd.exe.

Ответы [ 2 ]

3 голосов
/ 09 марта 2011

Вы должны вернуть значение.Я ожидаю, что ваш компилятор предупредит вас, что это не так.Если он не предупреждает вас, вам следует изменить параметры, чтобы сделать это.

Документация гласит:

Чтобы продолжить перечисление, функция обратного вызовадолжен вернуть TRUE;чтобы остановить перечисление, он должен вернуть FALSE.

Эта возможность завершить перечисление существует, чтобы позволить вам замкнуть перечисление.После того, как вы нашли нужный элемент, вам больше не нужно получать обратные вызовы.Существует множество функций Windows API, которые следуют этой идиоме.

2 голосов
/ 09 марта 2011

EnumDesktopWindows ожидает, что вы вернете значение из MyEnumProc:

return TRUE;

Прочтите документацию для получения дополнительной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...