有一结构:typedef struct _WNDCLASSA
   {  UINT style ;         //窗口类风格
     WNDPROC lpfnWndProc ;    //指向窗口过程函数的指针
     int cbClsExtra ;       //窗口类附加数据
     int cbWndExtra ;       //窗口附加数据
     HINSTANCE hInstance ;    //拥有窗口类的实例句柄
     HICON hIcon ;        //最小窗口图标
     HCURSOR hCursor ;      //窗口内使用的光标
     HBRUSH hbrBackground ;   //用来着色窗口背景的刷子 
     LPCSTR lpszMenuName ;    //指向菜单资源名的指针
     LPCSTR lpszClassName ;   // 指向窗口类名的指针
   } 
说lpfnWndProc是一个函数指针,那么它是在哪里定义的?它的原型是什么?
lpfnWndProc看起来并不是一个指针的形式啊!

解决方案 »

  1.   

    LONG WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) 
    或者
    LONG WINAPI WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) 我很少用API写程序。
    MSDN用例如下:
    // Register an ANSI window class. 
     
    WNDCLASSA AnsiWndCls; 
     
    AnsiWndCls.style         = CS_DBLCLKS | CS_PARENTDC; 
    AnsiWndCls.lpfnWndProc   = (WNDPROC)AnsiWndProc; 
    AnsiWndCls.cbClsExtra    = 0; 
    AnsiWndCls.cbWndExtra    = 0; 
    AnsiWndCls.hInstance     = hmodUser; 
    AnsiWndCls.hIcon         = NULL; 
    AnsiWndCls.hCursor       = LoadCursor(NULL, (LPTSTR)IDC_IBEAM); 
    AnsiWndCls.hbrBackground = NULL; 
    AnsiWndCls.lpszMenuName  = NULL; 
    AnsiWndCls.lpszClassName = "TestAnsi"; 
     
    RegisterClassA(&AnsiWndCls); // ANSI Window Procedure 
     
    LONG AnsiWndProc(HWND hwnd, UINT message, 
                     WPARAM wParam, LPARAM lParam) 

     
        // Dispatch the messages that can be received. 
     
        switch (message) 
        { 
            case WM_CHAR: 
     
                // wParam - the value of the key 
                // lParam - (not used in this example) 
     
                if (lstrcmpA("Q", (LPCSTR) wParam)) 
                { 
                    // ...
                } 
                else 
                { 
                    // ...
                } 
                break; 
            // Process other messages. 
        } 

      

  2.   

    一个函数就行,不过在winmain里,有它自己的修饰符
      

  3.   

    我的意思是lpfnwndproc既然是一个函数指针就要这样定义啊:
    long (*lpfnwndproc)(HWND,UINT,WPARAM,LPARAM)那么_WNDCLASSA结构应该是:
    typedef struct _WNDCLASSA
       {  UINT style ;         //窗口类风格
         long (*lpfnwndproc)(HWND,UINT,WPARAM,LPARAM); //指向窗口过程函数的指针
         int cbClsExtra ;       //窗口类附加数据
         int cbWndExtra ;       //窗口附加数据
         HINSTANCE hInstance ;    //拥有窗口类的实例句柄
         HICON hIcon ;        //最小窗口图标
         HCURSOR hCursor ;      //窗口内使用的光标
         HBRUSH hbrBackground ;   //用来着色窗口背景的刷子 
         LPCSTR lpszMenuName ;    //指向菜单资源名的指针
         LPCSTR lpszClassName ;   // 指向窗口类名的指针
       } 
    为什么不定义成上面的形式啊?应该是这样的形式的啊!
    有谁知道其内幕啊?
      

  4.   

    晕S,你对函数指针的应用果真不熟啊,为了使代码易于阅读,一般将函数指针这样声明
    typedef LRESULT (CALLBACK* WNDPROC)(HWND, UINT, WPARAM, LPARAM);用的时候就是WNDPROC lpfnWndProc了.
      

  5.   

    WNDPROC lpfnWndProc;
    long (*lpfnwndproc)(HWND,UINT,WPARAM,LPARAM); 这两种风格哪种更易于理解?楼主你说呢?
      

  6.   

    TO:_foo(void)//一个不知名的函数()        非常感谢!