作为一种类型的功能?

Amu*_*umu 1 c++ windows

我正在学习C++中的Windows编程.我创建了我的第一个Windows,但有一点我不太了解:WNDCLASS中的WNDPROC.结构记录如下:

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;
Run Code Online (Sandbox Code Playgroud)

现在为了分配给lpfnWndProc,我必须有一个像这样的回调函数WindowProc:

LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
Run Code Online (Sandbox Code Playgroud)

然后我必须像这样分配lfpnWndProc:

WNDCLASS wc = { };

wc.lpfnWndProc   = WindowProc;
Run Code Online (Sandbox Code Playgroud)

据我了解,WindowProc是一个功能.如果我像这样分配,这意味着我正在分配WNDCLASS中的函数指针.但是在WNDCLASS定义中,没有任何东西表明它是一个函数指针.此外,它看起来像我的数据类型而不是函数指针.

通常我会得到这样的函数指针作为参数传入或用作变量:

#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);
}
Run Code Online (Sandbox Code Playgroud)

但我必须分配WindowProc的方式对我来说没有意义.有人能帮助我理解这个吗?

Car*_*rum 7

WNDPROC是一个函数指针类型.定义是:

typedef LRESULT (CALLBACK* WNDPROC)(HWND, UINT, WPARAM, LPARAM);
Run Code Online (Sandbox Code Playgroud)

函数,有点像数组,在某些上下文中自动衰减成指针.将&在您的示例程序是可选的.