一般的windows消息循环是这样:
while (GetMessage(&msg,NULL,0,0))
{
    TranslateMessage(&msg);
    DispatchMessage(&msg);
}然而 DispatchMessage(&msg);
的在user32.dll中的实现实际是
LONG DispatchMessage(const MSG* msg)
{
    LONG lResult;
    WNDPROC lpfnWndProc=(WNDPROC)
         GetWindowLongPtr(msg.hwnd,GWLP_WNDPROC);
    lResult=lpfnWndProc(msg.hwnd,msg.message,msg.wParam,msg,lParam);
    return(lResult);
}  //<<windows核心编程>>
我现在就是怎么也想不明白
为什么不把  DispatchMessage(&msg)改为
wndproc(msg.hwnd,msg.message,msg.wParam,msg,lParam)
而非要用DispatchMessage
有的解释说是为了让操作系统也能够调用窗口的窗口过程
我不明白这是说的哪种情况

解决方案 »

  1.   

    因为wndproc不是你自己调用的,虽然是你自己写的,不过这是让操作系统调用的,因为操作系统处理消息,wndproc函数必定返回一个CALLBACK,除非你自己写消息的捕捉程序。深入浅出MFC有写。
      

  2.   

    实际过程比这要复杂. 不会仅仅简单地调用 窗口过程, 书上只是说明性的. 大致的工作原理. 谁看到过 user32.dll 的源代码?