关于窗口过程函数WndProc。

我始终没弄明白。winmain函数是在什么情况下调用WndProc函数的。来个明白人解释一下。谢谢。... 我始终没弄明白。winmain函数是在什么情况下调用WndProc函数的。来个明白人解释一下。谢谢。 展开
 我来答
Frank7258
推荐于2018-04-13 · TA获得超过1503个赞
知道小有建树答主
回答量:381
采纳率:0%
帮助的人:552万
展开全部
WndProc在WinMain里面没有直接调用,但是它被间接调用。下面的消息循环往往被称为主消息循环,是Win32程序驱动的根源,所有的Win32程序都会有类似的循环(MFC也不例外,在CWinThread::Run函数里面):

MSG msg;
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}

你的WndProc看起来似乎和上面的代码压根没有关系,但是奥妙就在DispatchMessage里面,这个函数的作用和他名字一样,是分发消息的,所有的窗口句柄都对应一个窗口过程函数,每个消息的窗口句柄则是在这个MSG结构中保存的,DispatchMessage的源代码虽然没有公开,但是几乎可以肯定,他先调用Windows API函数GetWindowLongPtr加上参数GWLP_WNDPROC,就可以获得窗口句柄所对应的窗口函数指针,接下来他就调用这个窗口函数。所以窗口函数被这个主消息循环间接调用了。当GetMessage获得的MSG结构中的窗口句柄是NULL的时候,DispatchMessage不调用任何窗口过程函数。
apple021891
2011-07-07
知道答主
回答量:76
采纳率:0%
帮助的人:26.7万
展开全部
如果你的程序是控制台应用程序,那么WndProc是没用的!
如果你的程序是窗口应用程序,那么你需要有个WNDCLASS的对象,这个对象有一个成员变量:WNDPROC lpfnWndproc ,你将你的回调函数地址赋值给这个成变量,那么你使用WNDCLASS对象创建窗口时,这个窗口接收到的任何窗口消息时都会回调这个WndProc函数
追问
那和  MSG 消息循环。构成一个怎么样的工作流程?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式