我新来的。以前用VC都是照猫画老虎,在wizard上按来按去,东西做完人也糊涂了。最近决定要知其所以然,所以买来一本《深入浅出MFC》翻翻。书上一开始教人从简单的SDK编程开始,并举了一个例子,其中有这样一个函数:
LRESULT CALLBAK WndProc( HWND, UINT, WPARAM, LPARAM )
{
...
}
我看到这里觉得很奇怪。因为WndProc函数前面有两个标识符。我知道C里面可以利用typedef自定义数据类型,但是这两个标识符都是自定义数据类型吗?还是别有玄机?
希望有人给我一点指点。

解决方案 »

  1.   

    哈,这是Window编程中的窗口过程函数,两个参数都是有含义的:)CALLBACK  是回调函数,即该程序向Windows提供的调用函数LRESULT 是一个指向32位数的指针
      

  2.   

    哈,不好意思,讲错了给出LRESULT的msdn的定义(其实象这样的问题大可查查msdn)LRESULT   A 32-bit value returned from a window procedure or callback function.
      

  3.   

    啊?我还以为是侯捷随手起的一个名字呢!原来MSDN里面有,我明天就去单位研究去。
    看来LRESULT才是这个函数的返回类型,应该是用typedef自定义的类型了。
    那么callback本质上到底是个什么东西呢?不是返回类型?
      

  4.   

    CALLBACK指明了函数调用约定
    CALLBACK Use in place of FAR PASCAL in application callback routines such as window procedures and dialog procedures.
      

  5.   

    恩,我查了一下MSDN。原来那些大写的,在C/C++里面都没有见过的数据类型都是所谓的Windows Data Types。他们可以作为函数的返回值类型,函数或消息的参数,以及结构体的成员。他们定义以上这些元素的size和含义。LRESULT第一个字母是L,表示这是一个指针。我觉得这些东西,总体上来讲,是为了是程序更易读。他们并不是C/C++之外的新的数据类型。
    不知道我的理解对不对?  明天这个时候结贴。
      

  6.   

    哈,不好意思,L 不是表示指针,而表示LONG(32位),P才是表示指针,如LPSTR     A 32-bit pointer to a character string.不过,这些定义确实是为了便于理解吧,毕竟,Code也是一种语言吧,关于回调Callback,就是某个类向其他如操作系统提供的用于被调用的函数,这样理解简单一些,而且有用