1. 程式人生 > >回調函數

回調函數

進行 另一個 enabled 它的 基於 gui 返回 機制 baidu

今天用到python的win32gui庫的時候,看到一個

titles = set()
def foo(hwnd,mouse):
    if IsWindow(hwnd) and IsWindowEnabled(hwnd) and IsWindowVisible(hwnd):
        titles.add(GetWindowText(hwnd))
EnumWindows(foo, 0)

一是不懂為什麽foo()使用時沒傳參數就用了,二是不懂foo()作為參數傳入EnumWindows()難道不需要返回值嗎?

後來查了後發現這是使用了一個叫回調函數的機制,之前只是聽說卻從沒見過,正好借這個機會了解一下。

【回調函數】回調函數就是一個通過函數指針調用的函數。如果你把函數的指針(地址)作為參數傳遞給另一個函數,當這個指針被用來調用其所指向的函數時,我們就說這是回調函數。回調函數不是由該函數的實現方直接調用,而是在特定的事件或條件發生時由另外的一方調用的,用於對該事件或條件進行響應。

不是很懂,而發現函數EnumWindow()正是一個典型的例子

另一個使用回調機制的API函數是EnumWindow(),它枚舉屏幕上所有的頂層窗口,每個窗口都可以通過它調用另一個程序提供的函數,並傳遞窗口的處理程序。
例如:如果被調用者返回一個值,就繼續進行叠代;否則,退出。EnumWindow()並不關心被調用者在何處,也不關心被調用者用它傳遞的處理程序做了什麽,
它只關心返回值,因為基於返回值,它將繼續執行或退出。

這就有點明白了它的用法

回調函數