作为一种类型的功能? 我正在学习C++的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; LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); WNDCLASS wc = { }; wc.lpfnWndProc = WindowProc;

作为一种类型的功能? 我正在学习C++的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; LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); WNDCLASS wc = { }; wc.lpfnWndProc = WindowProc;,c++,windows,C++,Windows,现在,为了分配给lpfnWndProc,我必须有一个回调函数WindowProc,如下所示: typedef struct tagWNDCLASS { UINT style; WNDPROC lpfnWndProc; int cbClsExtra; int cbWndExtra; HINSTANCE hInstance; HICON hIcon; HCURSOR hCursor; HBRUSH hbrBack

现在,为了分配给lpfnWndProc,我必须有一个回调函数WindowProc,如下所示:

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;
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
WNDCLASS wc = { };

wc.lpfnWndProc   = WindowProc;
然后我必须像这样分配lfpnWndProc:

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;
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
WNDCLASS wc = { };

wc.lpfnWndProc   = WindowProc;
据我所知,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);
}
#包括
作废my_int_func(int x)
{
printf(“%d\n”,x);
}
内部主(空)
{
无效(*foo)(int);
foo=&my\u int\u func;
富(2),;
(*富)(2);
}

但是我必须分配WindowProc的方式对我来说毫无意义。有人能帮我理解吗?

WNDPROC是一种函数指针类型。定义是:

typedef LRESULT (CALLBACK* WNDPROC)(HWND, UINT, WPARAM, LPARAM);
函数有点像数组,在某些上下文中会自动衰减为指针。示例程序中的
是可选的。

表示

lpfnWndProc

类型:WNDPROC

指向窗口过程的指针。必须使用CallWindowProc函数调用窗口过程

WinUser.h将其定义为

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

哦,我明白了。但是,如何在结构定义中像使用数据类型一样使用它呢?另外,为什么在返回LRESULT之前必须将其作为回调返回?@Amumu,在返回之后
typedef
,您可以像系统中的任何其他类型一样使用
WNDPROC
。因此,如果我将其视为一个类型,函数的返回值如何?既然它变成了一个类型,那么是否可以检索该值?您必须调用该函数来获取返回值-
result=wc。lpfnWndProc(a,b,c,d)
应该完全按照您的需要来做。我猜有人在叫您发布剪切粘贴答案