开发者

Function as a type?

I am learning Windows programming in C++. I created my first Windows, but there's one thing I don't really understand: WNDPROC in WNDCLASS. The structure was documented like this:

typedef struct tagWNDCLASS {
  UINT      style;
  WNDPROC   lpfnWndProc;
  int       cbClsExtra;
  int       cbWndExtra;
  HINSTANCE hInstance;
  HICON     hIcon;
  HCURSOR   hCursor;
  HBRUSH    hbrBackground;
  LPCTSTR   lpszMenuName;
  LPCTSTR   lpszClassName;
} WNDCLASS, *PWNDCLASS;

Now in order to assign to lpfnWndProc, I must have a callback function WindowProc like this:

LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);

And then I have to assign lfpnWndProc like this:

WNDCLASS wc = { };

wc.lpfnWndProc   = WindowProc;

As I understand, WindowProc is a function. If I assign like this, it means I am assigning to a function pointer in WNDCLASS. But in the WNDCLASS definition, nothing indicates it is a function pointer. Further more, it look开发者_如何学Pythons like a data type to me rather than a function pointer.

Normally I would do get a function pointer like this to pass in as a parameter or used as a variable:

#include <stdio.h>

void my_int_func(int x)
{
    printf("%d\n",x);
}

int main(void)
{
    void (*foo) (int);
    foo = &my_int_func;

    foo(2);
    (*foo)(2);
}

But the way I have to assign WindowProc just does not make sense to me. Can someone help me understand this?


WNDPROC is a function pointer type. The definition is:

typedef LRESULT (CALLBACK* WNDPROC)(HWND, UINT, WPARAM, LPARAM);

Functions, sort of like arrays, automatically decay into pointers in certain contexts. The & in your example program is optional.


MSDN says,

lpfnWndProc

Type: WNDPROC

A pointer to the window procedure. You must use the CallWindowProc function to call the window procedure.

WinUser.h defines it as,

typedef LRESULT (CALLBACK* WNDPROC)(HWND, UINT, WPARAM, LPARAM);
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜