求高手!

Roy_Smiling 2011-03-02 12:36:54
WINAPI __glutWindowProc( HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam )函数里有句这个:

case WM_KEYDOWN: return HANDLE_WM_KEYDOWN ( hwnd, wparam, lparam, __glutOnKey);


然后其它头文件里有句:
#define HANDLE_WM_KEYDOWN(hwnd, wParam, lParam, fn) \
((fn)((hwnd), (UINT)(wParam), TRUE, (int)(short)LOWORD(lParam), (UINT)HIWORD(lParam)), 0L)

这怎么理解,其中我感觉__glutOnKey 就是WM_KEYDOWN消息的处理函数。这个宏定义怎么解释啊?

哪位高手回答一下,万分感谢!
...全文
109 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
pengzhixi 2011-03-02
  • 打赏
  • 举报
回复
额 先调用fn这个回调函数,然后return 0;这写法真恶心
「已注销」 2011-03-02
  • 打赏
  • 举报
回复
((fn)((hwnd), (UINT)(wParam), TRUE, (int)(short)LOWORD(lParam), (UINT)HIWORD(lParam)), 0L)
然后整个表达式可能是个逗号表达式。。。
目的是返回0L值以前调用一下fn指向的函数
「已注销」 2011-03-02
  • 打赏
  • 举报
回复
(fn)((hwnd), (UINT)(wParam), TRUE, (int)(short)LOWORD(lParam), (UINT)HIWORD(lParam))
就是这样的。。。fn是个函数指针。。
Roy_Smiling 2011-03-02
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 c395565746c 的回复:]
(fn)((hwnd), (UINT)(wParam), TRUE, (int)(short)LOWORD(lParam), (UINT)HIWORD(lParam))
就是这样的。。。fn是个函数指针。。
[/Quote]

fn 是不是就是__glutOnKey(这就是个函数指针),有没有这种写法????????????
如果是的 话我就想明白了,但是没见过这种写法的啊 !
Roy_Smiling 2011-03-02
  • 打赏
  • 举报
回复
是不是fn 就是 __glutOnKey啊???????
Roy_Smiling 2011-03-02
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 pengzhixi 的回复:]
额 先调用fn这个回调函数,然后return 0;这写法真恶心
[/Quote]

#define HANDLE_WM_KEYDOWN(hwnd, wParam, lParam, fn)
和:
HANDLE_WM_KEYDOWN ( hwnd, wparam, lparam, __glutOnKey);
不一样,编译器预处理,怎么替换呢????
还有__glutOnKey也是个函数指针,它怎么执行呢?其实主要就是执行这个函数指针!
pengzhixi 2011-03-02
  • 打赏
  • 举报
回复
return ((fn)((hwnd), (UINT)(wParam), TRUE, (int)(short)LOWORD(lParam), (UINT)HIWORD(lParam)), 0L);
就这样了。括号里面是个逗号运算符,也就是说先执行fn,然后整个逗号运算符的结果是0,
所以执行完fn后,return 0;仅此而已。
Roy_Smiling 2011-03-02
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 c395565746c 的回复:]
(fn)((hwnd), (UINT)(wParam), TRUE, (int)(short)LOWORD(lParam), (UINT)HIWORD(lParam))
就是这样的。。。fn是个函数指针。。
[/Quote]

#define HANDLE_WM_KEYDOWN(hwnd, wParam, lParam, fn) \
((fn)((hwnd), (UINT)(wParam), TRUE, (int)(short)LOWORD(lParam), (UINT)HIWORD(lParam)), 0L)
和这个:
case WM_KEYDOWN: return HANDLE_WM_KEYDOWN ( hwnd, wparam, lparam, __glutOnKey);
不一样,编译器怎么替换呢?????

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧