对于非窗口过程,我一般是如此理解回调函数:使用回调函数实际上就是在调用某个函数(通常是API函数)时,将自己的一个函数(这个函数为回调函数)的地址作为参数传递给那个函数。而那个函数在需要的时候,利用传递的地址调用回调函数,这时你可以利用这个机会在回调函数中处理消息或完成一定的操作。感觉只是用函数指针调用函数,自己可以看到这个调用过程。但是,对于SDK编程,MainWindow建立时候,它注册WNDCLASS中,对应的回调函数是WinProc,我看不到显形的调用过程,请问程序是如何进入回调函数中去的?

解决方案 »

  1.   

    注册窗口类时有个wndclass.lpfnWndProc成员,是一个指向回调函数的指针类型
    在这里就定义了这个窗口类有消息时传递给这个函数。
      

  2.   

    您的意思是说,对于注册的每一个窗口,当WinMain中接受到消息时,即下面这段代码?    // Application message loop
        while (GetMessage (&msg, NULL, 0, 0)) {
            TranslateMessage (&msg);
            DispatchMessage (&msg);
        }
    它自动将消息分发到该窗口对应的回调函数中处理,我看不到中间的调用过程,是不是已经被封装好了?
      

  3.   

    int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
                        LPWSTR lpCmdLine, int nCmdShow) 这是进入的第一个函数,它的参数值是谁给的?
      

  4.   

    窗口函数的调用是Windows进行的
    当一个窗口接收到一个消息后,通过TranslateMessage()函数把消息转换成WM_something格式的消息
    然后再通过DispatchMessage()函数把这个消息发送给窗口函数,窗口函数再对相应的消息进行处理
      

  5.   

    认真读一下,侯捷的《深入浅出MFC》。
    就明白了。