传奇系列游戏:问一个VC问题

来源:百度文库 编辑:神马品牌网 时间:2024/05/05 21:48:53
关于WndProc函数声明
为什么有时是long WINAPI WndProc()
有时是 LRESULT CALLBACK WndProc()
LRESULT CALLBACK 是什么意思?

typedef LRESULT long; 所以这两个是一回事,在windows程序中,窗口函数返回值是一个32位长整数,所用用long,LRESULT是long result的简写吧。

CALLBACK是回调函数的意思,和WINAPI是一个意思,实际上都是__stdcall,是一种参数传递方式,具体怎么意思可以查看MSDN,但是我要说,回调函数是系统调用的,不是用户调用的,所以你写WIN32程序的时候,没有自己调用过这个WndProc窗口函数。程序收到的消息放在消息队列中,然后系统调用WndProc来处理这些消息。系统如何知道WndProc能处理应用程序消息呢?因为在注册窗口类的时候指定了函数指针呀。看看RegisterClass那个函数之前定义的WNDCLASS结构体变量吧。

LRESULT是long的宏定义,表明用途更直观,callback指示函树实参的堆栈顺序,这类还有fastcall、stdcall、pascal之类 ,可能还规定了是由调用者还是被调用者释放堆栈,可以查msdn