作为一种类型的功能? 我正在学习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;
现在,为了分配给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
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)
应该完全按照您的需要来做。我猜有人在叫您发布剪切粘贴答案