VC 리셋 함수의 사용에 대한 상세한 설명

1980 단어
리셋 함수는 말하자면 이벤트 응답 프로그램이다. Windows의 모든 메시지는 하나의 이벤트로 이해할 수 있고 이벤트의 응답 코드는 사용자 스스로 정의해야 한다.사용자가 이벤트 응답 코드를 정의했지만 Windows가 이 코드의 위치를 알아야 한다. (그렇지 않으면 Windows는 어떻게 호출해야 할지 모르기 때문에 이것도 소용없다.) 그래서 사용자는 리셋 함수의 바늘을 Windows에 알려야 한다. 가장 전형적인 예는 창 클래스의 구조 (WNDCLASS) 에서lpfnWndProc 분량에 리셋 함수 바늘 값을 부여하는 것이다.
리셋 함수의 매개 변수 형식은 리셋 함수의 호출자 (일반적으로 Windows) 에 의해 정의되며, 리셋 함수의 실현자는 반드시 이런 형식을 따라야 한다.Windows 프로그램은 이벤트 구동 모델을 바탕으로 하기 때문에 리셋 함수라는 메커니즘을 반드시 사용해야 한다.
콜백 함수를 철저히 이해하려면 SDK Samples를 많이 보십시오.한편, MFC의 메시지 매핑 메커니즘은 창 메시지 응답의 리셋 함수를 숨겼다. 이것은 C++의 프로그래밍 사상에 부합된다. 리셋 함수는 결국 전역 함수로서 클래스에서 실현할 수 없다. 메시지 매핑 메커니즘의 목적은 메시지 응답의 코드를 최종적으로 창 클래스(CWnd 클래스의 하위 클래스)에 봉인하는 것이다.
시간이 있으면 MESSAGEMAP 매크로, 메시지 매핑은 리셋 함수입니다. 단지 이런 리셋 함수의 사용법이 다를 뿐입니다.일반적인 리셋 함수는 주소를 제공해서 어떤 함수에 전달해서 호출하는 것이다.메시지 매핑 함수는 당신이 정의한 함수입니다.MESSAGEMAP 매크로는 주소를 가져와 호출합니다.
리셋 함수는 프로그래머가 현저하게 호출할 수 없는 함수이다.리셋 함수의 주소를 호출자에게 전달함으로써 호출을 실현합니다.리셋을 실현하려면 먼저 함수 포인터를 정의해야 한다.비록 정의된 문법은 약간 불가사의하지만, 함수 성명의 일반적인 방법을 잘 알면, 함수 지침의 성명과 함수 성명이 매우 유사하다는 것을 발견할 수 있다.
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;
}

좋은 웹페이지 즐겨찾기