什么是回调函数?WndProc函数的参数是怎么处理的??

我很想办WNDCLASS的设定和WndProc函数分别放在两个文件中但问题出来了参数怎么传递啊?有人说因为是回调函数,所以不必管它,但不管不行啊?还有第一个参数HWNDh... 我很想办WNDCLASS的设定 和 WndProc函数分别放在两个文件中

但问题出来了 参数怎么传递啊?有人说因为是回调函数,所以不必管它,但不管不行啊?

还有 第一个参数HWND hWnd的hWnd不设可以不? 设了好像也没什么用?
因为语句HWND hwnd = CreateWindow(...);在WNDCLASS定义之后,而WndProc的调用是在wndClass.lpfnWndProc = WndProc;语句中,此时还没有窗口句柄呢!参数中有一个,而后面又定义了一个,不是多此一举啊?

越想越不明白,到底是怎么回事??
展开
 我来答
lfm13720
2008-08-21 · TA获得超过1102个赞
知道小有建树答主
回答量:896
采纳率:0%
帮助的人:0
展开全部
回调函数用于异步操作中,就是让系统等待某个事件发生,并且告诉系统,事件发生后用哪个函数去处理,这个函数就叫回调函数,事件发生后,系统自动调用这个函数。而程序可以去做其它事件,不用等待事件。
这里WndProc这个函数就是告诉系统,接收到消息后就这个函数来处理。
HWND hWnd 这个参数不能不设,因为系统调用这个函数时是认为有这个参数的,你不设,调用就会出错,这是回调函数,是系统来调用,而不是你自己去调用。
你不用管这个问题,虽然WNDCLASS定义是在CreateWindow之前,但CreateWindow之前是没有消息的,所以不会调用WndProc,也就不会出错。wndClass.lpfnWndProc = WndProc;只是让系统知道消息函数的地址在哪里,在没有调用DispatchMessage(&msg); 之前是不会调用WndProc的。
这样解释不是很好,希望你能理解。
zhouxw2008
2008-08-21 · TA获得超过480个赞
知道小有建树答主
回答量:207
采纳率:0%
帮助的人:0
展开全部
你好:
(1)WNDCLASS的设定 和 WndProc函数是可以不放在同一文件里的,你在定义wndclss之前声明一下窗口过程处理函数即可,把函数的定义放在另一个文件里

(2)定义HWND hwnd;
hwnd=CreateWindow();
这样你并没有重复定义啊

(3)在wndlass定义的参数中是不需要定义窗口句柄的,值是定义了一个你在第一步声明的过程函数地址即可,你可以好好在看看它的参数

(4)窗口过程函数的地址在窗口类注册的时候传给了操作系统,当这个窗口收到消息后,消息dispatch()给了操作系统,操作系统根据窗口过程的地址就找到了处理函数 ,这就是操作系统的回调:即你定义函数体,操作系统帮你调用

还有疑问的话,我们可以在讨论

祝你好运!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
polang1988
2008-08-23 · TA获得超过171个赞
知道答主
回答量:100
采纳率:0%
帮助的人:110万
展开全部
这个问题书上有解释。
windowproc函数的四个参数分别对应消息的窗口句柄,消息代码,消息代码的两个参数。一个程序可以有多个窗口,第一个参数标识了消息接收的特定窗口。在窗口过程内部使用switch/case语句来确定窗口过程接收什么消息,以及怎么处理。代码如下:
LRESULT CALLBACK WindowProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
switch(uMsg)
{
case WM_CHAR:
break;
case WM_PAINT:
break;
case WM_CLOSE:
break;
default:
return DefWindowProc(hwnd,uMsg,wParam,lParam);
}
return 0;
}
这个函数是系统调用的,系统自会把参数传递过去的,你就不用考虑了,只要按格式写就行了。
格式就是这样,介绍一本书给你《VC++深入详解》孙鑫的书
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Aegisys
2008-08-21 · TA获得超过103个赞
知道小有建树答主
回答量:110
采纳率:0%
帮助的人:119万
展开全部
WndProc后出现hWnd可能是为了方便,程序员不用在CreateWindow后保存hWnd的值。
再说窗口过程是可能改变的(使用SetWindowLong)。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式