在看代码时,发现很多CALLBACK函数,所以仔细研究了一下C++中的CALLBACK函数
首先,我们来理解一下,什么是C++中的CALLBACK函数 => 凡是由你设计,但是由Windows操作系统调用的函数,我们把它统称为CALLBACK函数,这些函数都有一定的类型,以方便配合Windows的调用动作
某些Windows API函数会要求以callback函数作为其参数之一,这些API 比如SetTimer,LineDDA等。这些Windows API会在进行某种行为之后或者满足某种状态之时调用该callback函数。
看代码时发现,基本上CALLBACK函数都是全局函数,而不是类的成员函数。也就是说通常用全局函数(不要用类的成员函数)来作为CALLBACK函数。 =》 那么问题来了,为什么要这样? 可以采用类的成员函数来作为CALLBACK函数么? =》答案是可以的,但是你要把类的成员函数设置成static类型 => 为什么会这样呢
这是因为C++编译器为类成员函数多准备了一个隐藏参数 (程序代码中看不到), 这使得函数类型与Windows callback函数的预设类型不符.
我们来看一段代码
class CMyclass {
private :
int nCount;
int CALLBACK _export
EnumObjectProc(LPSTR lpObj, LPSTR lpData);
public:
void enumIt(CDC& dc);
}
void CMyclass::enumIt(CDC& dc)
{
//注册CALLBACK函数
CDC::EnumObjects(OBJ_BRUSH,EnumObjectProc,NULL,(CDC*)&dc);
}
标签:中以,函数,CALLBACK,Windows,CDC,C++,callback From: https://www.cnblogs.com/wphl-27/p/18220417