VC 回呼函數及使用方法

來源:互聯網
上載者:User

                                            VC 回呼函數及使用方法

回呼函數說白了就是事件響應程式,Windows的每個訊息可以理解為一個事件,事件的響應代碼要由使用者自己來定義。使用者定義了事件響應的代碼,但還要Windows知道這段代碼的位置(要不然Windows就不知道如何去調用,這也沒有用),於是使用者需要將回呼函數的指標告訴Windows,最典型的例子是在視窗類別的結構(WNDCLASS)中給lpfnWndProc分量賦回呼函數指標值。
回呼函數的參數格式是由回呼函數的調用者(一般是Windows)來定義的,而回呼函數的實現者必須遵循這種格式。Windows程式是以事件驅動模型為基礎的,這就必然要用到回呼函數這種機制。
要透徹瞭解回呼函數,多看看SDK Samples。而MFC中的訊息映射機制已經將視窗訊息響應的回呼函數隱藏起來了,這也符合C++的編程思想,回呼函數終究是一種全域函數,它不能在類中實現,而訊息映射機制的目的是使訊息響應的代碼最終封裝在視窗類別(CWnd類的子類)中。

如果有時間,不妨看看MESSAGE_MAP宏,訊息映射是回呼函數,只是這種回呼函數的用法不同而已。普通的回呼函數是要你提供地址,傳進某個函數,由它去調用;而訊息映射函數,卻是由你定義函數,由MESSAGE_MAP宏去取得地址,並實現它的調用。

回呼函數是一個程式員不能顯式調用的函數;通過將回呼函數的地址傳給調用者從而實現調用。要實現回調,必須首先定義函數指標。儘管定義的文法有點不可思議,但如果你熟悉函式宣告的一般方法,便會發現函數指標的聲明與函式宣告非常類似。

CODE:#include "stdafx.h"
#include "stdio.h"void (*fun1)();
void A()
{
 printf("fun1/n");
}void caller(void(*fun1)())
{
 printf("fun1 start/n");
 fun1();
 printf("fun1 end/n");
}bool func2(int * i)
{
 printf("From func2() = %d, Hello World!/n", (*i)++);
 return true;
}void caller2(bool func2(int *),int *j)
{
 func2(j);
}int main(int argc, char* argv[])
{
 printf("From main(), Hello World!/n");
 printf("/n");
 
 caller(A); int i = 0;
 for (int j = 0; j < 10; j++)
 {
  caller2(func2, &i); //* 傳遞函數地址到調用者 */
 }
 
 getchar();
 
 return 0;
}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.