我正在学习C ++中的Windows编程。我创建了我的第一个Windows,但有一点我不太明白:WNDPASS中的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;
现在为了分配给lpfnWndProc,我必须有一个像这样的回调函数WindowProc:
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
然后我必须像这样分配lfpnWndProc:
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);
}
但是我必须分配WindowProc的方式对我来说没有意义。有人能帮助我理解这个吗?
答案 0 :(得分:7)
WNDPROC
是函数指针类型。定义是:
typedef LRESULT (CALLBACK* WNDPROC)(HWND, UINT, WPARAM, LPARAM);
函数,有点像数组,在某些上下文中自动衰减成指针。示例程序中的&
是可选的。
答案 1 :(得分:1)
MSDN说,
lpfnWndProc
输入: WNDPROC
指向窗口过程的指针。必须使用CallWindowProc函数调用窗口过程。
WinUser.h 将其定义为,
typedef LRESULT (CALLBACK* WNDPROC)(HWND, UINT, WPARAM, LPARAM);